2016-09-16 1 views
0

を持っている「エラーが発生しました」 どの部屋にエラーがあった場合でもNeedHelpHereTextBlockのテキストをTrueに設定するにはどうすればよいですか?表示は、任意の子アイテムが、私は、階層内の家とその部屋を表示させたい、と私は家のどの部屋にエラーがあるかどうかを示すためにしたいエラー

私の最初の考えは、HouseViewModelにAnyRoomHasErrorプロパティを追加し、そのプロパティにテキストを結合し、のObservableCollectionのて、CollectionChangedイベントにイベントハンドラを登録し、新しいアイテムにPropertyChangedイベントをサブスクライブすることで、更新AnyRoomHasError PropertyChangedイベントであればHasErrorプロパティ用です。

良い方法はありますか?

ルームはバックグラウンドでエラーを取得できることにも注意してください。私。 Room.HasErrorは、ユーザーの入力なしでいつでも変更することができます。

+0

INotifyDataErrorInfoを実装し、結果を親ビューモデルでパイプ処理します。 – Will

答えて

0

私にとって最も簡単な方法は、SelectedRoomプロパティを実装することです。この選択された値が変更されるたびに、親ビューモデルはエラーを照会する詳細をスキャンします。イベントの配線を行う必要はありません。ほとんどの場合、ユーザの選択で何かをする必要があります。したがって、既にSelectedRoomを実装している可能性があります。

class HouseViewModel : INotifyPropertyChanged 
{ 
     private RoomViewModel _selectedRoom = null; 
     public RoomViewModel SelectedRoom 
     { 
      get { return _selectedRoom ; } 
      set { 
       if (_selectedRoom != null) 
        NotifyPropertyChange("AnyRoomHasError"); 

       if (_selectedRoom != null) 
        _selectedRoom = value; 
      } 
     } 

     public bool AnyRoomHasError { 
      get { 
       return rooms.Any(room => room.HasError); 
      } 
     } 
} 
+0

Room.HasErrorはユーザー入力なしでバックグラウンドで変更できるため、これは私のためには機能しません。この要件を含めるために投稿を編集しました。 – theguy

+0

したがって、PropertyChangeイベントを処理する必要があります。イベントハンドラでは、NotifyPropertyChange( "AnyRoomHasError")を呼び出すだけです。これを使う良いことは、AnyRoomHasErrorの複雑なロジックを避けることです。HasError = trueの最初の項目でループを中止します –

関連する問題