使用WPF双向数据绑定时更改setter属性中的值

Ken*_*sen 5 .net data-binding wpf

我有一个TextBox绑定到Entity-object上的Text-property.我希望能够重新格式化用户在某些情况下输入的文本 - 例如,如果用户输入"2/4"(一小部分) - 我想将其更改为"1/2".

通过Text-property的"set-part",我可以更改Entity-object上的值,但这不会出现在TextBox中 - 它仍然显示为"2/4"?

Mar*_*ris 15

原因是WPF中的绑定系统是"智能"的,当您更改TextBox中的值时,它会假定PropertyChanged事件将为该属性触发并忽略它.

您可以通过调用以下命令强制TextBox刷新其绑定:

textBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
Run Code Online (Sandbox Code Playgroud)

但困难在于找到一个好的地方来挂钩.显然你的数据对象不能这样做,因为它没有引用TextBox实例.你可以在保存TextBox的窗口中通过将它链接到数据对象的PropertyChanged事件处理程序来完成它,但这感觉不是很干净.

如果我想到一个更好的解决方案,我会编辑这个响应,但至少这解释了绑定不起作用的原因.


啊哈!将绑定更改为IsAsync = true:

<TextBox x:Name="textBox" Text="{Binding Path=TestData, IsAsync=true}"/>
Run Code Online (Sandbox Code Playgroud)

似乎改变行为,使其不会当它是由二传手发射注意PropertyChanged事件.


作为附录(32个月后),在.NET 4中更改此行为,您将不再需要IsAsync.