Azureはじめました

Windows Azureで業務システムを組んでみる日記

INotifyPropertyChangedを自動実装してくれるPropertyChanged.fodyが超便利

ViewModel的なものを作るときに必ず出てくるのがINotifyPropertyChanged インターフェイス (System.ComponentModel)

これを実装するのが定跡ではあるんだけど案外面倒くさい。

C# - INotifyPropertyChangedを実装する - Qiita

public sealed class Sample {
    public string FamilyName { get; set}
}

これを

public sealed class Sample : INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;

    public string FamilyName {
        get {
            return this._FamilyName;
        }
        set {
            if( this._FamilyName == value )
                return;
            this._FamilyName = value;
            this.PropertyChanged?.Invoke( this , new PropertyChangedEventArgs( nameof( FamilyName ) ) );
        }
    }
    private string _FamilyName;
}

こんな感じで各プロパティについて、実際に値が変更されたかをチェックし変更された時はイベントをinvokeしなきゃならないとかかなりめんどい。


以前からこれに対してT4テンプレートを使ったりコードスニペットを使ったりって記事は目にしてたけど、拡張性とか後々のメンテを考えるとイマイチ使いにくかった。

救世主 PropertyChanged.fody

で、見つけたのがこれ。

Injects INotifyPropertyChanged code into properties at compile time

Fody/PropertyChanged · GitHub

NuGetでインストールしたら

using PropertyChanged;

[ImplementPropertyChanged]
public sealed class Sample {
    public string FamilyName { get; set}
}

こうするだけ。


( ゚Д゚) すっげぇ。