INotifyPropertyChangeイベントでプロパティ名の間違いを防止する方法
結論
CodePlex Archiveを使うことをお勧めします.
背景
ほとんどのValueObject(以下,VO)の実装はINotifyPropertyChangedイベントを持ちます.これはプロパティの変更によりNotifyPropertyChangedイベントを発生させます.WPFはBindingがこのプロパティ変更通知イベントを検出して,VOの値をUIの表示に反映させます.
WPFのBindingは,NotifyPropertyChangedイベントが通知するプロパティ名に対応するプロパティをUIに反映します.(ちなみに,NotifyPropertyChangedイベントがプロパティ名にNullを指定した場合には,そのValueObjectの全てのプロパティが変更されたとしてUIに反映されます.)
このために,プロパティ名を間違って記述すると,VOの値を変更してもUIに反映されないという,デバッグが非常に困難なバグを発生させます.
NotifyPropertyChangedイベントを書く便利な方法
ミスを出さない簡素なコーディング方法は2つあります.
1つはプロパティ名を文字列で指定することです.例えば,このようなコードを書きます:
int _IntValue; const string _IntValueName = "IntValue"; public int IntValue { get {return _IntValue}; set {_IntValue = value; OnNotifyPropertyChange(_IntValueName); } //NotifyPropertyChangedイベントを発生させるメソッド void OnNotifyPropertyChange(string name);
この方法の弱点は,そもそもconstな文字列のスペルを間違えるかもしれないこと,Visual Studioのリファクタでプロパティ名を変更すると,constな文字列の値はそのままなので,プロパティ名とイベントで通知される名前が違ってしまうこと(私は使用していないので未確認ですが,ReSharper: The Visual Studio Extension for .NET Developers by JetBrainsは,プロパティ名と同期して文字列も変更してくれるみたいです)です.
2つ目は,CodePlex Archiveなどの,MSILレベルでプロパティ名を検出してイベントを起こすライブラリを使用することです.こちらの方法が,お勧めです.
3つ目の方法として,クラス宣言から実装クラスを生成してコンパイルして読み込むライブラリを自分で作るのもありです.こちらは,自分でやってみたのですが,実行のたびに動的にコンパイルしてアセンブリを読み込ませるのでパフォーマンスがよくない,デバッグでトレースできないとか,微妙な使いづらさがありました.先ほどの2番目の方法が手軽で便利です.