この件に関するコメントの大多数に同意しますが、このインターフェースへの「アップグレード」を提供するために回答しています。
このインターフェイスの問題点はIDataErrorInfo
、一度に 1 つのエラーしか対処できないことです。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
を使用してプロパティにバインドすることもできます。BoolToVisibilityConverter