我有一个实现IDataErrorInfo Interface。
的ViewModel类在每个属性的 集 中,我验证传入的值,如果验证失败,我调用一个名为 AddError <的方法/ strong>为属性添加错误。 AddError 方法将一个项目添加到我用来管理错误的基础数据类型中(Dictionary(Of String,List(Of String)))。
目前在数据输入过程中工作正常。如果用户输入属性的无效值,则会突出显示用于输入数据的FrameworkElement,并将ToolTip设置为错误消息。
现在,这是我的问题。
说我的对象从一开始就包含无效字段.... 例如,如果我有一个带有必填字段“Name”的Person类,并且我创建了Person类的新实例。名称字段不会突出显示为“错误”,因为名称属性的 设置 方法尚未被调用。
因此,我也将验证放入了该属性的 get 。
这似乎有效,但......感觉就像是黑客。并且一些属性验证必须由模型完成(而不是我正在使用的ViewModel)。模型会出现应该设置的相应错误消息,但除非我设置了Model的属性,否则我无法获取错误消息。
关于实现IDataErrorInfo接口的最佳方法的任何建议都非常感激。
谢谢!
-Frinny
答案 0 :(得分:0)
我发现了一些不像黑客的东西。
我也应该提到我有一个我的ViewModel继承的基类。我在这个基类中实现了IDataErrorInfo接口。
我最终做的是向名为“Validate”的基本ViewModel类添加一个新的MustOverride方法,该类验证提供给它的属性名称。如果验证失败,那么它会在我的基础错误字典中添加一个条目。
我在Item属性中调用了validate方法(实现了IDataErrorInfo.Item属性)。
这样每个派生类都可以包含它自己的验证代码,我可以确定该方法是存在的,因为它是基本ViewModel类的一部分。
如果这不是最好的方法,请告诉我。
-Frinny