为什么在WPF TextBox失效时ViewModel不会更新?

Her*_*des 5 .net c# wpf mvvm

今天我查看了MSDN示例,以便对WPF TextBox输入进行验证(另请参阅:http://msdn.microsoft.com/en-us/library/ms753962.aspx).

在我自己的应用程序中,我使用MVVM模式将视图的DataContext绑定到ViewModel.某些TextBox是ViewModel上属性的数据绑定,并且具有特定的ValidationRules.

我发现的是,当一个值失效后,在之前成功验证之后,旧值将保留在ViewModel中.在我看来非常缺乏,因为值例如用于命令执行.

我的这个确切问题也适用于给定的MSDN示例.TextBox的值只有在成功验证后才会发送回它的源代码.我想保留验证逻辑,但它应该始终更新源.这可能吗?

提前致谢.

def*_*mer 3

正如 Rachel 和 Henk 所指出的,这就是 WPF 验证规则的构建方式。如果验证失败,它不会将值写入属性。

至于他们为什么决定以这种方式构建它,可能是因为他们希望在验证失败时保持一致的行为。有时视图上的值无效(例如负数年龄),但可以将其写入属性中。其他时候,它是无效的,无法写入属性(例如,“foo”的 Age 无法转换为 int)。如果行为是“如果可能的话,将值写入属性”,则可能会令人困惑。

和你一样,我希望我的 ViewModel 尽可能得到更新,无论验证错误如何。业务对象是另一回事,但“诺克斯堡视图模型”对我来说似乎很奇怪,因为无效输入不仅可以,而且是预期的。通常在我的 ViewModel 中我想知道“当前值”,而不是“最后一个有效值”。这是我不喜欢 ValidationRules 的原因之一。