Можно ли переписать этот метод расширения без параметра?
public static string PropertyName<T>(this T obj, Expression<Func<T>> property)
{
var memberExpression = property.Body as MemberExpression;
if (memberExpression == null)
throw new ArgumentException("Expression must be a MemberExpression.", "property");
return memberExpression.Member.Name;
}
Это тестовый код для функции.
string TEST = Guid.NewGuid().ToString();
string propertyName = TEST.PropertyName(() => TEST);
Эторезультат:
propertyName = "TEST"
Я хотел бы переписать код так:
string propertyName = TEST.PropertyName();
Ps.Меня не интересует статическая версия этого метода!
Для тех, кто не видит смысла в этой функции.В шаблоне MVVM вы уведомили об изменении свойства.Вот так.
this.RaisePropertyChanged("TEST");
Это плохой подход, поскольку имя свойства жестко закодировано.С помощью метода расширения вы получите:
this.RaisePropertyChanged(()=>Test);
Я хотел бы переписать метод расширения следующим образом:
this.RaisePropertyChanged(Test.PropertyName());
Ниже приведен пример кода из моего проекта MVVM.(это свойство Model)
public DateTime Start
{
get { return WorkModel.Start; }
set
{
if (WorkModel.Start != value)
{
WorkModel.Start = new DateTime(SelectedDate.Year, SelectedDate.Month, SelectedDate.Day, value.Hour, value.Minute, value.Second);
this.RaisePropertyChanged("Start");
this.RaisePropertyChanged("TotalWork");
}
}
}