【问题标题】:WPF (.net 3.5) ValidationRule , IDataErrorInfoWPF (.net 3.5) ValidationRule , IDataErrorInfo
【发布时间】:2010-06-25 16:26:28
【问题描述】:

我正在尝试找出验证用户输入的最佳方法,并且我一直在研究 ValidationRule 和 IDataErrorInfo。我有一个虚拟机和一个模型,我想确保用户不会将 alpha char 输入到绑定到双精度(或整数)的多个文本框中。

我遇到了 3 个问题

1) 当我使用 ValidationRule 时,该方法会返回一个“ValidationResult”,但它会去哪里?它是否作为财产存储在某个地方?

2) 如果我使用 IDataErrorInfo 并输入一些 alpha char,它永远不会被调用(如果输入了数字)这是预期的吗? *

*(我认为值转换器在这里可能会有所帮助,但我觉得我将两个独立的概念混合在一起)

3) 我真正想做的是在用户单击“保存”并检查所有值时最后进行验证。因此,根据1838300,也许使用这两种方法不是我所需要的。这是正确的,这些真的只用于“动态”验证吗?

我对第 3 点的想法是,如果 ValidationRule 的结果存储在某个地方,我可以检查每个控件的存储位置或存储位置。或者,如果调用了 IDataErrorInfo,我可以为每个控件手动存储一些布尔值并检查它们。

有什么想法或想法吗?

谢谢!

【问题讨论】:

    标签: wpf validation data-binding


    【解决方案1】:

    有几件事,你需要知道:

    当依赖属性的类型与基础值不同时 - 如果不存在 valueconverter,则会尝试自动转换。

    这都是普通绑定引擎的一部分。因此,由于您的文本框输入不能很好地转换为带有 alpha 字符的整数/双精度数,因此会引发异常并将不断引发异常,直到您更正依赖属性(此处为 TextBox 的 Text 属性)的值 - 的属性设置器现在永远无法到达底层数据对象。

    如果您在更改文本框中的文本时在输出窗口中查看异常,则可以验证此行为。请参阅这篇文章,了解如何正确实现 Validation 和 IDataErrorInfo:link

    【讨论】:

      【解决方案2】:

      您可能对 WPF Application Framework (WAF)BookLibrary 示例应用程序感兴趣。它展示了如何在 WPF 中使用验证,以及在存在验证错误时如何控制“保存”按钮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多