オブジェクト (オブジェクト A、B) の階層があり、それぞれが次のINotifyPropertyChanged
ように実装されています...
A には B 型のメンバーがあり、B には C のメンバーがあり、C は bool 型です
C が変更されると、そのPropertyChanged
イベントが発生しますが、これは B のプロパティ変更イベントを発生させません。したがって、A は B の変化に反応しません。
これを泡立てる良い方法はありますか?
オブジェクト (オブジェクト A、B) の階層があり、それぞれが次のINotifyPropertyChanged
ように実装されています...
A には B 型のメンバーがあり、B には C のメンバーがあり、C は bool 型です
C が変更されると、そのPropertyChanged
イベントが発生しますが、これは B のプロパティ変更イベントを発生させません。したがって、A は B の変化に反応しません。
これを泡立てる良い方法はありますか?
これはかなり単純なソリューションですが、PropertyChangedイベントをサブスクライブして、呼び出しを伝播することはできませんか?
例えば
MyContainedObject.PropertyChanged += PropertyChangedHandler;
次に、ハンドラーで:
private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
this.OnPropertyChanged(e.PropertyName);
}
これは、オブジェクトに同じ名前のプロパティがある場合にうまく機能します。異なる名前のプロパティがある場合は、プロパティ値を変換するためにもう少し作業を行う必要があります。
private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Property1":
this.OnPropertyChanged("ADifferentProperty1");
break;
case "Property2":
this.OnPropertyChanged("ADifferentProperty2");
break;
default:
this.OnPropertyChanged(e.PropertyName);
break;
}
}
これは素晴らしいです。もう少し時間をかけて確認する必要があります。ありがとうございました。
別の解決策を見つけましたが、それはちょっとしたハックです。バインド パス プロパティをネストされた型に設定しただけです。上記の例を使用して、私の xaml (オブジェクト A の DataContext を持つ) で、バインディングを次のように設定しました...
{結合パス=BC}
イベントをバブリングする方が間違いなくエレガントです。