在C#(WPF)中,当UI线程中的数据更改时,数据绑定是否立即发生?

5
我正在创建一个应用程序,我一直以为当控件绑定到视图模型的成员时(例如将TextBox绑定到字符串字段),只有在用户更改文本框中的信息时才会更新字符串,而不是之后。
但是我发现,当用户更改文本框中的信息并且离开文本框时,字符串会被更新。
(如果使用Caliburn.Micro框架,则可能会有所不同。)
有人能解释哪种方式是正确的,以及如何使更改立即反映出来吗?
1个回答

6
这不是WPF问题... 完全取决于控件。
但我发现当文本框更改时并且用户点击或离开文本框时,字符串会更新。
这是特定的文本框,以减少设置操作的数量并避免设置不完整的数据。 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c3ae2677-7cc9-4bb3-9cce-4e7c0eeff6f0 有一个解决方案-基本上将更新源触发器设置为属性更改。然而,如果您这样做,模型中会有更多的无效数据,例如当人们输入发票号码时,所有部分都将进入模型。 http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx 有一个很好的解释-就像它所说的那样,正常触发器是PropertyChanged,而文本属性默认为LostFocus。

谢谢你的回答,我一定会查看链接。至于错误数据,视图模型实际上正在进行输入验证,并且除非所有内容都通过,否则不会保存任何内容到模型中。 - Scifiballer24
当然,如果您只处理“完成的输入”并且不获取“在途更新”,那么验证就会少得多。 ;) - TomTom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接