可以使用Validator.TryValidateObject强制[CustomValidation]属性来验证属性吗?

时间:2011-04-26 09:58:42

标签: silverlight wcf-ria-services

我使用CustomValidationAttribute修饰了一个类的属性,以验证是否设置了GUID值,但是当我尝试使用辅助方法 Validator.TryValidateObject()强制执行它时似乎它没有调用我的验证逻辑。

当装饰属性的值发生更改时,将触发验证逻辑,但我需要处理用户单击保存按钮而不填写必填字段的情况,因此需要强制验证属性在运行之前运行调用 DomainContext.SubmitChanges()

有趣的是,即使继承自ValidationAtrribute的类也不会被Validator.TryValidateObject()运行。

强制执行验证属性的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

在属性级别应用的自定义验证器必须使用TryValidateProperty单独验证。

e.g。

Validator.TryValidateProperty(ViewModel.MyProperty,
                new ValidationContext(ViewModel.MyProperty, null, null) 
                { MemberName = "MyProperty" }, results); 

答案 1 :(得分:1)

更简单的方法是将TryValidateObject()上的最后一个参数(validateAllProperties)设置为true。有关详细信息,请参阅msdn article

List<ValidationResult> vr = new List<ValidationResult>();
ValidationContext vc = new ValidationContext(viewModel, null, null);
Validator.TryValidateObject(viewModel, vc, vr, true);