我同意关于这个主题的绝大多数评论,但我回答是提供我对这个界面的“升级”。
我看到的IDataErrorInfo
界面问题是它一次只能解决一个错误。BaseDataType
因此,我在我的类(我的所有数据类型的基类)中添加了一个额外的字段:
protected ObservableCollection<string> errors = new ObservableCollection<string>();
然后我添加了以下属性:
// this just enables me to add into the error collection from outside this class
public ObservableCollection<string> ExternalErrors
{
get { return externalErrors; }
}
public override ObservableCollection<string> Errors
{
get
{
errors = new ObservableCollection<string>();
// add properties to validate
errors.AddUniqueIfNotEmpty(this["Property1ToValidate"]);
errors.AddUniqueIfNotEmpty(this["Property2ToValidate"]);
errors.AddUniqueIfNotEmpty(this["Property3ToValidate"]);
// add external errors (from view models)
errors.AddRange(ExternalErrors);
return errors;
}
}
public virtual bool HasError
{
get { return Errors != null && Errors.Count > 0; }
}
该AddUniqueIfNotEmpty
方法是一种扩展方法,相信大家都能猜到它的作用。
使用它,我可以直接绑定到视图中的错误集合,甚至更好的是,HasError
使用 a 绑定到属性BoolToVisibilityConverter
,以便在集合为空时隐藏显示错误的控件。