HasErrors属性可以在其他属性发生变化时进行同步更新。如果一个类实现了INotifyPropertyChanged,并且值发生变化,就会触发PropertyChanged事件。
不管指定的属性是有效还是无效,都应该触发ErrorsChanged事件。如果对象级验证已经发生变化,则应使用null或字符串触发ErrorsChanged事件。
在新模型中,GetErrors应该始终返回一个支持IEnumerable<ValidationResult>的集合类。ValidationResult类提供了有用的信息,例如哪些属性是验证警告的一部分。这对于一些错误消息来说非常管用,比如“至少需要提供名字/姓氏中的一个”。
基于属性的验证
我们可以使用基于属性的验证完成很多工作,虽然这样并不适合所有的情况。方法是在属性上放置ValidationAttribute的子类。这里有些例子:
- CreditCardAttribute
- EmailAddressAttribute
- EnumDataTypeAttribute
- FileExtensionsAttribute
- PhoneAttribute
- UrlAttribute
- MaxLengthAttribute
- MinLengthAttribute
- RangeAttribute
- RegularExpressionAttribute
- RequiredAttribute
-
StringLengthAttribute
要创建自己的验证属性类,只需重写IsValid方法。通常这用于单属性验证,不过也可以通过ValidationContext来访问对象的其他属性。










