.net 3.5 - >之间的绑定行为差异。 4.5

时间:2014-02-12 15:23:30

标签: wpf binding converter .net-4.5 behavior

我将一些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;
    }

}

1 个答案:

答案 0 :(得分:0)

我认为这完全是关于Binding模式的。由于这些在3.5和4.5中有所不同,请尝试指定Mode="OneWayToSource"