缺点是它接受ValidationContext对象作为参数,而几乎没有人知道如何使用这个类。以下是ValidationContext的属性。
- DisplayName:获取或设置要验证成员的名称。
- Items:获取与此上下文关联的键值对字典。
- MemberName:获取或设置要验证成员的名称。
- ObjectInstance:获取要验证的对象。
- ObjectType:获取要验证的对象类型。
-
ServiceContainer:获取验证服务容器。
关于如何使用这些属性并没有相关的指南。例如,什么时候应该设置MemberName属性? DisplayName属性实际上做了什么?字典中应该保存什么以及在验证期间何时可以访问它?
文档中说它“可以通过任何实现IServiceProvider接口的服务添加自定义验证”,但并没有说明IServiceProvider.GetService(Type)方法需要支持哪些类型,因此无法利用此特性。
总而言之,ValidationContext类想要做所有的事情,但由于糟糕的API设计和几乎没有详尽的文档,它变得一无是处。由于没有UI框架使用这个接口,所以没有理由支持它或IValidatableObject接口。
属性变更通知
属性变更通知在很多情况下都很有用,不过更常见的是与MVVM设计模式相关联。属性变更通知通过INotifyPropertyChanged接口公开出来,让模型可以通知关联的UI元素:基础数据发生了变化。我们可以借此做一些有趣的事情,比如在后台进程中更新模型或者在多个视图之间共享模型。










