能否在WPF验证中同时使用ValidationRules和INotifyDataErrorInfo?

8
在WPF中,有三种方法可以进行验证:
  • 验证规则(Validation Rules)
  • IDataErrorInfo
  • INotifyDataErrorInfo
是否可能同时使用这些方法的组合?对于我的需求,我想要使用具有INotifyDataErrorInfo灵活性的新规则进行验证,但是不希望干扰现有对象的ValidationRules验证。
1个回答

4

1. 混合不同的错误来源

您可以混合三种您引用的验证方式:

  • ValidationRules 适用于 GUI(表面)验证。
  • IDataErrorInfo 实现在视图模型/业务对象上。它适用于更加业务化的验证。
  • INotifyDataErrorInfo 也是实现在视图模型/业务对象上。它增加了在给定字段上多个错误的可能性,并且还增加了异步验证(即服务器或线程需要一些时间才能响应验证)。

最后一种错误来源实际上需要更长的实现时间。

2. 考虑错误

最困难的部分是考虑不同的错误来源,以便在数据无效时防止窗口关闭。

ValidationRules 错误必须在 GUI 绑定中查找,因为无效数据没有到达业务对象/视图模型。

IDataErrorInfoINotifiDataErrorInfo 可以在视图模型层中查找。

祝好!


我使用了这两个的组合,现在遇到了一些副作用,但我能够暂时忍受。 - disklosr
当然可以容忍,甚至有用;-)。因为这些不是同一种验证,它们可以互补。 - Emmanuel DURIN
@disklosr,你说的副作用是什么?我正要在现有的INotifyDataErrorInfo实现中实施一些验证规则,因为我不希望用户向我的模型添加特定字符。但如果有副作用,了解一下会更有趣,这将使答案更具信息性。 - Piotr Golacki

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