有人能告诉我在WPF中哪种方法是更好的验证方法吗?
实现IDataErrorInfo
在性能方面,内存泄漏、代码可维护性和重用。
发布于 2010-06-06 00:27:13
这是一种复杂的请求,老实说,它可能会因偏好而异,而不是其他任何东西。但是,我的理解是:
除非您的其他实现是可怕的,否则
?
ValidationRules比IDataErrorInfo老(我相信后者是在.Net 3.5中引入的)。基于这一点,WPF团队似乎更喜欢IDataErrorInfo。但事实是,它们是为不同的事物而建造的。如果您有MVVM或等效的模式,IDataErrorInfo在模型中的错误(例如,负值年龄)优于ValidationRules,而对于视图中的错误(例如,☃的年龄),ValidationRules更优。当然,可以让ValidationRules执行“业务逻辑”检查,或者让IDataErrorInfo告诉您“unicode雪人不是一个有效的时代”,但是通过保持这种模式,您将(可能)获得最佳的可维护性。
但是,在初始测试之后,不要使用异常进行验证,以查看您应该测试的确切条件。
发布于 2013-09-30 03:42:28
使用异常来处理错误并不是个好主意。使用异常会降低性能。这是一个选择和实现IDataErrorInfo或创建ValidationRule的问题。
IDataErrorInfo
中所有字段的完全控制。
验证规则
中重用它。
我的观点是,对于常见的验证,如所需的字段验证,电子邮件地址验证,您可以使用验证规则。如果您需要进行诸如范围验证之类的自定义验证,或者使用IDataerrorinfo进行任何自定义验证。
发布于 2020-04-20 06:04:01
我对这一主题的看法与其他两种回答中提出的观点略有不同:
ValidationRule
ValidationRule,或者使用BindingGroup提供一个单独的ValidationRule,该ValidationRule一次检查多个绑定。IDataErrorInfo或INotifyDataErrorInfo
例外
基于性能考虑,
ValidationRule发生得太早,IDataErrorInfo发生得太晚。抛出属性设置程序的异常将解决这些情况。底线:每种验证技术都有自己的优缺点,适合于特定的场景。没有一个比其他任何一个都优越。这在很大程度上取决于您要做的是什么类型的验证,以及希望在哪里执行该逻辑。
https://stackoverflow.com/questions/2980853
复制相似问题