かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

2018 年はじめの INotifyPropertyChanged の実装方法

前にこんな記事を書きました。

blog.okazuki.jp

まぁ別にこの時と何かしら INotifyPropertyChanged を実装するために使える機能が増えたりしてないので状況が変わったわけではないのですが…。現実問題としてどういうものを選択するのかということをつらつらと書いてみたいと思います。

実際の業務で使用するとした場合に選択する方法

多分、大人しく INotifyPropertyChanged を実装した BindableBase クラスを作ってコードスニペットの組み合わせです。

ライブラリを使う場合は Prism.Core を入れて Visual Studio の拡張機能に Prism Template Pack を入れて propp コードスニペットで OK です。 基本クラスの縛りは嫌ですが、何かしら全体に波及する機能を簡単に追加するための手段としては親クラスは C# でとても簡単に実現できる手段だと思ってます。例えば setter で呼び出す SetProperty メソッドで DataAnnotations によるバリデーションを実行するとかいう処理を入れたい場合は、親クラスで作りこむのが一番簡単ですよね?多分。

Rx がいけそうな環境なら ReactiveProperty を使うと思います。

Roslyn Analyzer

これも Visual Studio 2015 からある機能なので、新しいものではないですが、C# といえばという Top 2 のお二方が実装しているものがあります。

ufcpp.net

github.com

これで生成されるコードと用意されているカスタマイズポイントで満足できる場合は使ってもいいかもしれません。 でも実際に使うなら、このコードを参考にしながら自作 Analyzer を作ることを試みるかも。自分の要件に従って作った方がつぶしが効くのかなぁと思います。

まとめ

なかなか決め手になる楽な方法がないなぁという印象です。 ちなみに今はコードスニペットで頑張ってます!

なんだかんだで setter / getter にコードを好きに書けるので色々つぶしが効くんですよね。