WPFネタね
public clas Root : INotifyPropertyChanged
{
ChildA _a;
ChildB _b;
Root MySelf;
}
public clas ChildA : INotifyPropertyChanged
{
ChildC _c;
}
public clas ChildB : INotifyPropertyChanged
{
int _i;
}
public clas ChildC : INotifyPropertyChanged
{
double _d;
}
全部フィールド風に書いていますが、プロパティと読み替えてください。
たとえばこのような構成で、_dの値が1→10に変更されたとします。
その場合以下のようなPropertyChangedイベントが上がることが期待されます。
ChildCのd
ChildAのc
Rootのa
RootのMySelf
これらは適切にエスカレーションするコードを記述する必要があります。
具体的に_ChildAの実装は
public clas ChildA : INotifyPropertyChanged
{
ChildC _c;
public ChildA() {this.c.PropertyChanged+={this.FirePropertyChanged("c");}}
}
こんなかんじです。
問題はこのChildたちが差し替わる場合です。さし替わる場合には以下のようなコードが必要です。
ChildC c{
set
{
this._c.PropertyChanged -= FireC;
this._c=value;
this._c.PropertyChanged += FireC;
}}
private FireC() {this.FirePropertyChanged("c");}
他にもChildCに対して、親が差し替わったことを通知してやることがふさわしい場合があります。そんな場合には
ChildC c{
set
{
this._c.PropertyChanged -= FireC;
this._c.Parent = null;
this._c=value;
this._c.PropertyChanged += FireC;
this._c.Parent = this;
}}
親が一つの場合にはいいですが、親が二つの場合には+=のような機構を作成してやる必要があります。
どこまで必要かはわかりませんが、ご自身のアプリケーションにあわせて、設計してください。