新的C#5.0版本中引入的东西在INotifyPropertyChanged的实施摆脱 “魔术字符串”,如:MVVM CallerMemberName和 “神奇字符串”
OnPropertyChanged("CustomerName");
现在可以只写:
OnPropertyChanged();
它是可能的,因为在CallerMemberName方法定义:
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{ ... }
它是米比“魔法字符串”的方式更容易重构,并且比lambda表达式更快,但我不知道我们怎么能从一个set访问器调用多次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我忽视了一些巧妙的方法来处理“魔术字符串”,但是我做了一些研究并没有发现。
为什么你想说的高度已经改变,只是因为宽度有?你真的意味着是像“大小”? – 2013-02-23 10:23:56
这只是一个例子,但有时一个特性可以依赖于其他。例如,如果宽度总是高度* 2。 – Overpain 2013-02-23 11:58:34