我将一些3.5代码升级到4.5(VS 2012),并且似乎在转换器的执行方式方面有不同的行为。我在下面的例子中展示了这个问题。
编译.net 3.5时,更改文本框中的值只会导致“ConvertBack”。
编译.net 4.5时,更改文本框中的值会导致“ConvertBack”和“Convert”。
我认为它可能与“KeepTextBoxDisplaySynchronizedWithTextProperty”有关,但将其设置为false似乎没有帮助。
除了修复支持新行为的逻辑之外,还有另一种选择吗?
public class ConverterTest : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Console.WriteLine("Convert");
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
Console.WriteLine("ConvertBack");
return value;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
public partial class MainWindow : Window
{
double m_test = 5.678;
public double Test
{
get { return m_test; }
set { m_test = value; }
}
public MainWindow()
{
FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
DataContext = this;
var tb = new TextBox();
tb.SetBinding(TextBox.TextProperty, new Binding("Test")
{
Converter = new ConverterTest(),
Mode = BindingMode.TwoWay,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
});
Content = tb;
}
}
答案 0 :(得分:0)
我认为这完全是关于Binding模式的。由于这些在3.5和4.5中有所不同,请尝试指定Mode="OneWayToSource"