【发布时间】:2011-06-20 00:45:38
【问题描述】:
OneWayToSource .NET 4.0 中的绑定似乎被破坏了
我有这个简单的 Xaml
<StackPanel>
<TextBox Text="{Binding TextProperty, Mode=OneWayToSource}"/>
<Button/>
</StackPanel>
我后面的代码是这样的
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private string m_textProperty;
public string TextProperty
{
get
{
return "Should not be used in OneWayToSource Binding";
}
set
{
m_textProperty = value;
}
}
在 .NET 3.5 中可以正常工作,但除外。在TextBox 中添加一些文本,按 Tab 使其失去焦点,TextProperty 会更新为 TextBox 中输入的任何文本
在 .NET 4.0 中,如果我在 TextBox 中键入一些文本,然后按 Tab 使其失去焦点,TextBox 将恢复为 TextProperty 的值(意思是 “不应在 OneWayToSource 绑定中使用”)。这种重新阅读是否适用于 .NET 4.0 中的 OneWayToSource 绑定?我只希望TextBox 将其值推入TextProperty,而不是相反。
更新
为这个问题添加赏金,因为这已成为我项目中的市长不便,我想知道这种情况发生变化的原因。似乎在 Binding 更新了源之后调用了 get。这是 .NET 4.0 中 OneWayToSource 绑定所需的行为吗?
如果是
- 它在 3.5 中的工作方式有什么问题?
- 在什么情况下这种新行为更好?
或者这实际上是我们希望在未来版本中修复的错误吗?
【问题讨论】: