【问题标题】:Validation in WPF - Custom validation rule or IDataErrorInfoWPF 中的验证 - 自定义验证规则或 IDataErrorInfo
【发布时间】:2011-05-20 12:39:25
【问题描述】:

作为一个新的 WPF 程序员,我找不到两种不同的用户输入验证方式之间的区别:

编写自定义验证规则与实现 IDataErrorInfo 的优缺点是什么,反之亦然?什么时候我应该更喜欢其中一个?

更新:

虽然我已经得到了答案,但我发现 related article 可能对其他人有所帮助。

【问题讨论】:

    标签: wpf validation idataerrorinfo


    【解决方案1】:

    IDataErrorInfo

    • 验证逻辑保留在视图模型中,易于实现和维护
    • 完全控制视图模型中的所有字段

    验证规则

    • 在单独的类中维护验证规则
    • 提高可重用性。例如,您可以实现必填字段 验证类在整个应用程序中重复使用它。

    我的意见是,对于必填字段验证、电子邮件地址验证等常见验证,您可以使用验证规则。如果您需要进行自定义验证,例如范围验证,或任何自定义验证,请使用 IDataerrorinfo。

    【讨论】:

      【解决方案2】:

      基本上,如果您实现IDataErrorInfo,则在绑定对象中实现验证,而如果您实现验证规则,则在附加到绑定的对象中实现验证。

      就个人而言,如果您使用的是 MVVM,我认为您必须疯了才能使用除 IDataErrorInfo 之外的任何东西。您希望验证存在于视图模型中。如果它在您的视图模型中,它是集中的并且是可测试的。如果它在您的视图中,那么您的验证逻辑可能是错误的或缺失的,找到它的唯一方法是手动测试您的视图。这是可避免的错误的巨大潜在来源。

      在某些地方使用验证规则是有意义的 - 例如,如果您正在围绕哑对象构建 UI(例如 XmlDataSource)。但对于大多数生产应用程序,我不会靠近它。

      【讨论】:

      • 使用 ValidationRule 的一个潜在好处是,您可以在 ViewModel 更改为不正确的值之前检查值的正确性。
      • 我认为 ValidationRules 仅适用于不使用 MVVM 的情况。如果您使用 ValidationRule 来防止在视图中输入的数据进入视图模型,则视图模型不再对视图进行建模。要理解所有这些东西而不使其变得更加不透明,这已经够难的了。
      • 但 ValidationRule 似乎是自定义错误消息的唯一方法
      【解决方案3】:

      您实现 IDataErrorInfo 以便能够通过 eas 使用数据绑定。您仍然可以构建自定义验证规则。

      【讨论】:

      • 我不确定我是否完全理解您的答案:我可以实现 IDataErrorInfo,或者从 ValidationRule 继承并覆盖“Validate”方法......我没有同时使用它们。我错了吗?
      猜你喜欢
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2018-02-18
      • 1970-01-01
      • 2014-04-22
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多