gpt4 book ai didi

c# - 为什么当 WPF TextBox 无效时 ViewModel 没有得到更新?

转载 作者:太空狗 更新时间:2023-10-29 23:18:03 24 4
gpt4 key购买 nike

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

在我自己的应用程序中,我使用 MVVM 模式将 View 的 DataContext 绑定(bind)到 ViewModel。某些 TextBox 数据绑定(bind)到 ViewModel 上的属性,并在其上具有特定的 ValidationRules。

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

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

提前致谢。

最佳答案

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

至于为什么他们决定以这种方式构建它,可能是因为他们希望在验证失败时保持一致的行为。有时 View 上的值无效(例如负年龄),但可以将其写入属性。其他时候它以一种不可能写入属性的方式无效(例如,“foo”的 Age 不能转换为 int)。如果行为是“尽可能将值写入属性”,则可能会造成混淆。

和您一样,我希望我的 ViewModel 尽可能得到更新,无论验证错误如何。 Business objects are a different matter ,但“Fort Knox ViewModels”对我来说似乎很奇怪,因为无效输入不仅没问题,而且预期。通常在我的 ViewModel 中,我想知道“当前值”,而不是“最后一个有效值”。这是我不喜欢 ValidationRules 的原因之一。

关于c# - 为什么当 WPF TextBox 无效时 ViewModel 没有得到更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6662736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com