我在 WPF 应用程序中有一个 View 模型类,它具有一些非常复杂的验证。我已经实现了 IValidatableObject
提供自定义验证逻辑的接口(interface)。问题是我的 IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
永远不会被调用!
这是尝试验证的代码:
Validator.TryValidateObject(RMA, new ValidationContext(RMA, null, null), result);
关于为什么 Validator
的任何想法对象没有调用我的自定义验证代码?
最佳答案
问题是我在自定义类中的一个字段上设置了[Required]
并且Validator
将不会执行自定义验证,直到所有数据注释验证已经完成。删除 [Required]
允许执行自定义验证。
编辑:
验证对象时,在 Validator.ValidateObject 中应用以下过程:
- 验证属性级属性
- 如果任何验证器无效,则中止验证并返回失败
- 验证对象级属性
- 如果任何验证器无效,则中止验证并返回失败
- 如果在桌面框架上并且对象实现了
IValidatableObject
,则调用它的Validate方法并返回任何失败
http://jeffhandley.com/archive/2009/10/16/validator.aspx
验证将在第 2 步中止。
关于c# - 自定义验证未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149899/