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