1
일부 3.5 코드를 4.5 (VS 2012)로 업그레이드하면 변환기가 어떻게 실행되는지에 따라 동작이 달라집니다. 아래 예제에서 문제를 시연했습니다..net 3.5 -> 4.5
.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;
}
}
바인딩이 명시 적으로 TwoWay (TwoWay 여야 함)가되도록 예제를 편집했지만 동일한 동작을 생성합니다. – wforl