Различия в поведении привязки между .net 3.5 -> 4.5

Я обновляю некоторый код 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;
    }

}

person wforl    schedule 12.02.2014    source источник


Ответы (1)


Я думаю, что все дело в режиме привязки. Поскольку они различаются в 3.5 и 4.5, попробуйте указать Mode="OneWayToSource"

person VidasV    schedule 12.02.2014
comment
Я отредактировал пример так, чтобы привязка была явно двусторонней (мне нужно, чтобы она была двухсторонней), ... но все равно ведет себя так же - person wforl; 12.02.2014