R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

データバインドの着火方法(その3)

http://blogs.wankuma.com/rti/archive/2008/06/10/142627.aspx
データバインドの着火方法(その2)

の続き・・・と言うか更にメモ。

NortifyPropertyChanged

で LINQ to Objects 使って存在チェックする必要はなかったです。

以下、なぐり書きコード。


public class MyTextBox : TextBox
  private string _Value;

  [Bindable(BindableSupport.Default)]
  public string Value {
    get { return this._Value; }
    set {
      if (this._Value == value) reurn;
      this._Value = value;
      NortifyPropertyChanged("Value")
    }
  }
  private void NortifyPropertyChanged(string propertyName) {
    var b = this.DataBindings[propertyName];
    if (b == null) return;
    if (!b.IsBinding) return;
    if (b.DataSourceUpdateMode == DataSourceUpdateMode.Never) return;
    b.WriteValue();
  }
}


コレクション中にターゲットアイテムが存在するかどうかを事前に確認するためのメソッドが見つからなかったので前回のコードを書いたのですが、存在しない場合は、例外エラーではなくて null が返るだけなので、上記のようにした方が高速だしスッキリ書けるみたい。

投稿日時 : 2008年6月11日 13:12

Feedback

# re: データバインドの着火方法(その3) 2008/06/12 0:59 Streetw☆

えムナウさんが書かれてますけど、
Controlから派生してる場合、INotifyPropertyChangedを実装すると、
DataSourceUpdateMode.Neverにしない限り、自動的にWriteValueされますよ~

# re: データバインドの着火方法(その3) 2008/06/13 13:28 R・田中一郎

コントロール側でも INortifyPropertyChange のイベント捕まえてくれるんですね。
実は、最初のエントリーをあげる前にうまく更新されなかったので、データソース側のプロパティだけが対象なのだと勝手に解釈していました。

後日確認して、結果をエントリーにあげたいと思います。

ありがとうございました。

タイトル
名前
Url
コメント