a wandering wolf

Does a wandering wolf dreams of a wondering, sometimes programming sheep?

このエントリーをはてなブックマークに追加

PropertyChangedEventHandlerのnullを避ける

最近はWPFアプリを書いているので、そのあたりの備忘録を書き残してみます。

PropertyChangedがnull

私だけかも知れませんが、INotifyPropertyChanged インターフェイスを実装したクラス(例えばViewModel)が持つ PropertyChangedEventHandler のフィールドが何故か null になってしまいます:

public class SampleViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
    {
        // 何故か PropertyChanged が null で、ここがスルーされる。
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

どうしたもんかなぁと思っていましたが、とりあえず回避策を見つけられたのでそれで逃げています:

public class SampleViewModel : INotifyPropertyChanged
{
    // 空のデリゲートを割り当てておく
    public event PropertyChangedEventHandler PropertyChanged = delegate {};

    public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
    {
        // Invoke が実行される。
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}