2014-02-12 58 views
1

將一些3.5代碼升級到4.5(VS 2012),並且似乎在執行轉換器方面會有不同的行爲。我在下面的例子中已經證明了這個問題。.net 3.5 - > 4.5之間的綁定行爲差異

編譯.net 3.5時,更改文本框中的值只會導致「ConvertBack」。

當編譯爲.NET 4.5,改變文本框值導致在這兩個「ConvertBack」和「轉換」。

我認爲這可能是與「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

我編輯的例子,這樣的結合是明確雙向(我需要它是雙向),...但仍產生相同的行爲 – wforl

相關問題