2011-10-24 4 views
0

シングルフィールド検証で検証がうまく動作するwpfフォームがあります。 DataAnnotationsクラスをIDataErrorInfoクラスに接続して、正しく表示するようにしました。WPF検証では、他の相互接続されたui要素をトリガーして検証ステータスを再確認する方法

ここでは、より複雑な検証を含むより複雑なフォームがあります。ビューモデルでIValidatableObjectを実装しましたが、これが呼び出されています。フィールドが変わるたびに手動でValidator.TryValidateObjectを呼び出すと、IDataErrorInfoクラスが正しくエラーを返すことがわかります。

私の問題は、確認ステータスを再確認するUIを取得する方法がわからないことです。たとえば、Dが特定の値である場合にのみ必要なフィールドA、B、Cがあります。これらのフィールドにはDataAnnotationフラグはありません。私は、IValidatableObjectのValidate実装のエラーリストを返します。

Dを編集するときに、A、B、またはCにエラーは表示されません。Aに何かを入れて戻したら、Aにエラーが表示されます。しかし、私はすべてのフィールドが自動的にそれをやりたい。これを行う通常の方法はありますか?特にViewModelからトリガーする方法はありますか?

答えて

1

私はしばらく前に同じ質問があったと私はPropertyChangingイベントにフック拡張メソッドを作成し、指定されたValidationGroup内の任意のプロパティの検証エラーを上げたやってしまった何SO here

上に掲載

それは同じように使用されます。

public MyViewModel() 
{ 
    this.AddValidationGroup(
     new List<string> { "A", "B", "C", "D" }, 
     GetValidationError, OnPropertyChanged); 
} 

欠点は、あなたのクラスは(INotifyPropertyChangingを実装する必要がある私は、Entity Frameworkの、および耳鼻咽喉科を使用していました

PropertyChangingイベントを使用しないもう1つの回答があり、お手伝いができます。

もちろん、関連するプロパティの設定メソッド内にOnPropertyChanged("X");を単純に呼び出すという解決策があります。

public string A 
{ 
    get { return _a; } 
    set 
    { 
     _a = value; 
     RaisePropertyChanged("A"); 
     RaisePropertyChanged("B"); 
     RaisePropertyChanged("C"); 
     RaisePropertyChanged("D"); 
    } 
} 
+0

私は実際に最後のことをしました - 彼らはEFオブジェクトではなく、思ったよりもずっと簡単でした – Clyde

関連する問題