自定义验证不执行

时间:2011-08-22 15:35:59

标签: c# c#-4.0 data-annotations

我在WPF应用程序中有一个View Model类,它有一些非常复杂的验证。我已经实现了IValidatableObject接口来提供自定义验证逻辑。问题是我的IEnumerable<ValidationResult> Validate(ValidationContext validationContext)从未被调用过!

以下是尝试验证的代码: Validator.TryValidateObject(RMA, new ValidationContext(RMA, null, null), result);

为什么Validator对象没有调用我的自定义验证代码?

1 个答案:

答案 0 :(得分:8)

问题是我在自定义类的其中一个字段上有[Required]Validator在完成所有数据注释验证之前不会执行自定义验证。删除[Required]允许执行自定义验证。

EDIT:

验证对象时,在Validator.ValidateObject中应用以下过程:

  1. 验证属性级属性
  2. 如果任何验证器无效,则中止验证将返回失败
  3. 验证对象级属性
  4. 如果任何验证器无效,则中止验证将返回失败
  5. 如果在桌面框架上并且对象实现了IValidatableObject,则调用其Validate方法并返回任何失败
  6. http://jeffhandley.com/archive/2009/10/16/validator.aspx

    验证将在步骤#2中止。