2014-02-12 3 views
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; 
    } 

} 

답변

0

나는 이것이 모두 바인딩 모드에 관한 것이라고 생각합니다. 3.5와 4.5가 다르므로 지정하십시오. Mode="OneWayToSource"

+0

바인딩이 명시 적으로 TwoWay (TwoWay 여야 함)가되도록 예제를 편집했지만 동일한 동작을 생성합니다. – wforl