中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

エスカレーションしたい

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;
}}

親が一つの場合にはいいですが、親が二つの場合には+=のような機構を作成してやる必要があります。

どこまで必要かはわかりませんが、ご自身のアプリケーションにあわせて、設計してください。

投稿日時 : 2007年9月22日 14:06

コメントを追加

# エスカレーションしたい2 2007/09/24 11:53 中の技術日誌ブログ

エスカレーションしたい2

タイトル
名前
URL
コメント