何时调用IDataErrorInfo的AddError方法

时间:2011-02-17 20:43:02

标签: wpf validation

我有一个实现IDataErrorInfo Interface

的ViewModel类

在每个属性的 中,我验证传入的值,如果验证失败,我调用一个名为 AddError <的方法/ strong>为属性添加错误。 AddError 方法将一个项目添加到我用来管理错误的基础数据类型中(Dictionary(Of String,List(Of String)))。

目前在数据输入过程中工作正常。如果用户输入属性的无效值,则会突出显示用于输入数据的FrameworkElement,并将ToolTip设置为错误消息。

现在,这是我的问题。

说我的对象从一开始就包含无效字段.... 例如,如果我有一个带有必填字段“Name”的Person类,并且我创建了Person类的新实例。名称字段不会突出显示为“错误”,因为名称属性的 设置 方法尚未被调用。

因此,我也将验证放入了该属性的 get

这似乎有效,但......感觉就像是黑客。并且一些属性验证必须由模型完成(而不是我正在使用的ViewModel)。模型会出现应该设置的相应错误消息,但除非我设置了Model的属性,否则我无法获取错误消息。

关于实现IDataErrorInfo接口的最佳方法的任何建议都非常感激。

谢谢!

-Frinny

1 个答案:

答案 0 :(得分:0)

我发现了一些不像黑客的东西。

我也应该提到我有一个我的ViewModel继承的基类。我在这个基类中实现了IDataErrorInfo接口。

我最终做的是向名为“Validate”的基本ViewModel类添加一个新的MustOverride方法,该类验证提供给它的属性名称。如果验证失败,那么它会在我的基础错误字典中添加一个条目。

我在Item属性中调用了validate方法(实现了IDataErrorInfo.Item属性)。

这样每个派生类都可以包含它自己的验证代码,我可以确定该方法是存在的,因为它是基本ViewModel类的一部分。

如果这不是最好的方法,请告诉我。

-Frinny