新しいC#5.0リリースでは、INotifyPropertyChanged実装の「マジックストリング」を取り除くために次のようなものが導入されました。
OnPropertyChanged("CustomerName");
これで、次のように書くことができます。
OnPropertyChanged();
メソッド定義のCallerMemberNameが原因で可能です。
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{ ... }
「マジックストリング」の方法よりもリファクタリングに適していて、ラムダ式よりも高速ですが、1つのセットアクセサーからOnPropertyChangedを複数回呼び出すにはどうすればよいのでしょうか。たとえば、次のようなものが必要な場合:
public int Width
{
get
{
return width;
}
set
{
width = value;
OnPropertyChanged("Width");
OnPropertyChanged("Height");
}
}
CallerMemberNameの方法でこれを行い、「マジックストリング」とラムダ式の使用を回避するにはどうすればよいですか?
また、IDataError情報で「マジックストリング」の使用を回避するにはどうすればよいのでしょうか。
public string Error
{
get;
private set;
}
public string this[string columnName]
{
get
{
if (columnName == "Name")
{
if (String.IsNullOrWhiteSpace(Name))
Error = "Name cannot be null or empty.";
else
Error = null;
}
return Error;
}
}
私はMVVMを初めて使用するため、「マジックストリング」を処理するための巧妙な方法を見落とした可能性がありますが、調査を行っても何も見つかりませんでした。