新的 C# 5.0 版本引入了一些东西来摆脱 INotifyPropertyChanged 实现中的“魔术字符串”,例如:
OnPropertyChanged("CustomerName");
现在可以只写:
OnPropertyChanged();
由于方法定义中的 CallerMemberName ,这是可能的:
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{ ... }
它比“魔术字符串”方式更易于重构,并且比 lambda 表达式更快,但我想知道我们如何从一组访问器中多次调用 OnPropertyChanged。例如,如果我们想要这样的东西:
public int Width
{
get
{
return width;
}
set
{
width = value;
OnPropertyChanged("Width");
OnPropertyChanged("Height");
}
}
我们如何使用 CallerMemberName 方式做到这一点并避免使用“魔术字符串”和 lambda 表达式?
我还想知道如何避免在 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 的新手,所以也许我忽略了一些处理“魔术字符串”的聪明方法,但是我做了一些研究,却一无所获。