新的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