2012-03-12 14 views
1

WPFのバインディングシステムにコレクションのアイテムの変更を通知して、コレクション内のアイテムが変更されるたびにIDataErrorInfoによる検証が再評価されるようにしたいとします。 私は、INotifyCollectionChangedを実装している(そして適切に動作する)カスタムリストタイプを持っています。しかし、何らかの理由で検証ロジックが呼び出されることはありません。なぜなら、この通知が適切な場所に届かないためです(少なくとも私は仮定しているからです)。このシナリオも可能ですか?私は何を逃したのですか?IDataErrorInfoのコレクションの更新の通知

だから、基本的に "アーキテクチャ" は、以下である、[編集]:

  1. MVVM基本クラスがIDataErrorInfoを実装し、次のような派生MVVMクラスでラムダ、とDataValidatorsを登録することができます:
RegisterDataValidator(() => People,() => (People.Count == 0) ? "At least one person must be specified" : null); 

基本クラスのインデクサーは、登録されたバリデータをチェックし、それによって返されたバリデータを返します。

private void OnSubPropertyChanged (object sender, PropertyChangedEventArgs e) 
    { 
     if (sender is T1) 
     { 
      if (CollectionChanged != null) 
      { 
       NotifyCollectionChangedEventArgs eventArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender); 
       CollectionChanged(this, eventArgs); 
      } 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(myPropertyName)); 
      } 
     } 
    } 
:私はアイテムがそれに追加されたときに、アイテムのPropertyChangedEventが登録していること基本的にリストされ、クラス自体にて、CollectionChangedイベントを焼成することにより、これらのイベントに反応する SmartBindingList<T> where T: INotifyPropertyChangeを持って

  1. これはうまく動作しますが、コードがCollectionChanged(this、eventArgs)行で実行されている場合、検証の点で何も起こりません。コレクションに何かを追加すると、完全に機能するので、正しく配線する必要があります。私は何が欠けていますか?

+1

あなたの関連するIDataErrorInfoコードを表示 –

+0

私は同じ問題があります – Mohsen

答えて

1

これは暗闇の中でいくつかのコード例がなくても少し刺すようですが、変更されたプロパティのOnPropertyChanged通知を呼び出そうとしてください。これにより、検証の再評価が行われるはずです。

+0

それはコードなしでかなり良いスタブです! – Khan

+0

さて、私はちょうどピンクになるテキストボックスを取得しようと数日間過ごしました(もちろんエラーがあるとき)。検証はWPFの最も単純な機能の1つではありません。 – Phil

関連する問題