“INotifyPropertyChanged”実装を支援するVS拡張機能「Notify Property Weaver」
導入するだけで煩雑な“INotifyPropertyChanged”の実装が不要に
「Notify Property Weaver」は、“INotifyPropertyChanged”インターフェイスの実装を支援する「Visual Studio」用の拡張機能。「Visual Studio 2010」に対応するフリーソフトで、編集部にてWindows 7上の「Visual Studio 2010 Professional」で動作を確認した。ライブラリサイト“Visual Studio Gallery”からダウンロードできる。
WPF/Silverlightなどでは、“データバインディング”という仕組みが標準で用意されている。この仕組を利用すれば、ビュー(ユーザーインターフェース)へオブジェクトをバインド(紐付け)して、当該オブジェクトの内容変更を自動的にビューへ反映できるほか、逆にビューへの入力をオブジェクトへ反映させることも可能。見た目と機能を分離できるので、再利用性が向上したり、設計を簡素に保つことができるほか、テストが容易になるなどの効果も期待できる。
“データバインディング”を利用するには、ビューへプロパティの変更を通知するためのインターフェイス“INotifyPropertyChanged”を、バインドするオブジェクトが実装している必要がある。たとえば、以下のコードがあるとする。
public class Person
{
public string GivenNames { get; set; } // 名
public string FamilyName { get; set; } // 姓
public string FullName { // 氏名
get { return string.Format("{0} {1}", GivenNames, FamilyName); }
}
}
これに“INotifyPropertyChanged”インターフェイスを実装すると、以下のようなコードになる。
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string givenNames;
public string GivenNames // 名
{
get { return givenNames; }
set
{
if (value != givenNames)
{
givenNames = value;
OnPropertyChanged("GivenNames"); // 名が変わった
OnPropertyChanged("FullName"); // 氏名が変わった
}
}
}
string familyName;
public string FamilyName // 姓
{
get { return familyName; }
set
{
if (value != familyName)
{
familyName = value;
OnPropertyChanged("FamilyName"); // 姓が変わった
OnPropertyChanged("FullName"); // 氏名が変わった
}
}
}
public string FullName // 氏名
{
get
{
return string.Format("{0} {1}", GivenNames, FamilyName);
}
}
// プロパティが変更されたことを通知するイベントを発行
public virtual void OnPropertyChanged(string propertyName)
{
var propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
このようにソースコードが非常に煩雑になる上、プロパティの変更通知がプロパティ名(string型)でやり取りされるためIDEのコード補完機能が利用できないため、ミスタイプを誘発することも少なくない。
そこで便利なのが「Notify Property Weaver」だ。本拡張機能は、中間言語(IL)へコンパイルされたコードを分析し、ビルド時にプロパティの変更通知を行うコードを注入(Weave:織り込む)する。そのため、煩雑な“INotifyPropertyChanged”の実装が不要になり、プログラマーはそれ以外の要素の設計と実装に注力できるようになる。
ちなみに、「Notify Property Weaver」を利用した場合、上記のコードは以下のように簡略化することが可能。
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string GivenNames { get; set; } // 名
public string FamilyName { get; set; } // 姓
public string FullName { // 氏名
get { return string.Format("{0} {1}", GivenNames, FamilyName); }
}
}
“名”や“姓”の変更にともなう“氏名”の変化も、「Notify Property Weaver」が検知してコードを自動挿入してくれるため、正常にビューへ反映される。
なお作者によると、.NET Framework 3.5/4/4.5、Silverlight 3/4/5(Windows Phone 7を含む)で動作を確認しているとのこと。
- 【著作権者】
- Simon Cropp 氏
- 【対応OS】
- (編集部にてWindows 7で動作確認)
- 【ソフト種別】
- フリーソフト
- 【バージョン】
- 1.42.0.0(12/04/09)
- URL
- notifypropertyweaver - Notify Property Weaver - Google Project Hosting
https://code.google.com/p/notifypropertyweaver/ - Notify Property Weaver extension
http://visualstudiogallery.msdn.microsoft.com/bd351303-db8c-4771-9b22-5e51524fccd3 - Microsoft Visual Studio ホームページ - 最新ソフトウェア開発の統合開発環境 (開発ツール) Visual Studio 2010 情報を提供
https://www.microsoft.com/japan/msdn/vstudio/



