Livetを使ったC#のWPFプログラミング

システムとして機能が網羅されたサンプルをもとに、Livetを使ったC#のWPFシステムの開発技能を身に付ける為の学習サイト


8-1.変更通知プロパティ


戻る

INotifyPropertyChangedインターフェース

WPF でコントロールにオブジェクトを Binding している場合、オブジェクトのプロパティが変更されたときにコントロールの表示も伴って更新されてほしいわけだが、 残念ながら更新されない。これは、更新されたことを通知する機構がオブジェクトに備わっていないからである。このページではこれの対応策を示す。

WPF でコントロールにオブジェクトを Binding して、オブジェクトのプロパティが変更されたときにコントロールの表示も同時に更新するには、更新されたことを通知する機構がオブジェクトに備わっていないので、INotifyPropertyChangedインターフェースを実装すると PropertyChanged イベントが追加されるので、これをコールするための下記のようなメソッドを作っておく。


ViewModel

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string name)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(name));
    }
}


この引数 name には変更されたプロパティの名前を渡す。そして変更を通知すべきプロパティ(表示を更新する必要のあるプロパティ)の set アクセサで次のようにコールする。


ViewModel

private string _userId;
public string UserId
{
    get
    {
        return _userId;
    }
    set
    {
        _userId = value; 
        OnPropertyChanged("UserId");
    }
}

これで UserId に値がセットされると、変更が通知されるようになる。