在项目中实现M-V-VM并遵循Karl Shifflett的建议实现验证框架,但不想仅为验证部分使用完整的框架(如Ocean)。
您推荐哪个与M-V-VM模式兼容的验证框架?
我只能从未使用完整验证框架的经验中说起,因为我一直坚持使用WPF本身提供的内容。
在我的项目中,我在实体/数据类上实现了IDataError接口,并实现了部分"OnValidate"方法,Linq-To-Sql观察到这些方法。然后,作为实体类的静态/共享成员,我实例化了自己编写的验证辅助程序,这些程序提供了实现IDataError.Items和OnValidation方法的后端逻辑。
然后,只需将ValidatesOnErrors=True、ValidatesOnExceptions=True添加到XAML中描述的所有绑定即可。最终结果是令人鼓舞的——WPF提供的无效数据的视觉反馈能力很好,而实现验证的工作量很小。
我建议遵循将用户输入验证逻辑与属性设置器逻辑分开的趋势。有时,一个属性的有效性取决于另一个属性的状态。将验证逻辑保留在属性设置器之外,可以构建出允许最终用户输入两个值以产生有效状态的应用程序,而不会被单个属性设置器拒绝正在输入的值。