В новом выпуске С# 5.0 появилось что-то, чтобы избавиться от «магических строк» в реализации INotifyPropertyChanged, например:
OnPropertyChanged("CustomerName");
Теперь можно написать просто:
OnPropertyChanged();
Это возможно из-за CallerMemberName в определении метода:
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{ ... }
Это гораздо более удобно для рефакторинга, чем способ «магических строк», и быстрее, чем лямбда-выражения, но мне интересно, как мы можем вызывать 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, поэтому, возможно, я упустил из виду какой-то умный способ справиться с «магическими строками», однако я провел некоторое исследование и ничего не нашел.