1
当您拖动滑块时,会得到一个ConvertBack(预计),但为什么然后我会直接得到一个“Convert”?我只希望Convert在第一次初始化时被调用,或者如果它正在引发属性更改通知,但它不会。WPF循环转换器
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:WpfApplication10"
Title="MainWindow">
<Slider Value="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={l:Converter}}"/>
</Window>
public class Converter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
public partial class MainWindow : Window
{
public double Value { get; set; }
public MainWindow()
{
DataContext = this;
InitializeComponent();
}
}
+1为好链接和答案。 – Sheridan
这出现在4.5中用3.5编写的代码中。在少数情况下,传入Convert/ConvertBack的值不完全相同(例如数字类型的精度损失),并且会导致奇怪的行为。如果你可以选择退出新的行为,那将会很好。 – pastillman
这有点令人惊讶,我不会指望这种行为是愚蠢的 - 你的意思是浮点数/双精度的精度很奇怪吗? float/double是单向的1.5和1.499999999是正常的,这是避免使用它们的一个原因,除非你的意思是。如果是这样的话,你有没有考虑使用小数? – ianschol