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;
}
}
我編輯的例子,這樣的結合是明確雙向(我需要它是雙向),...但仍產生相同的行爲 – wforl