Можно ли переписать этот метод расширения без параметра?Можно ли переписать этот сложный метод расширения?
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 проекта. (это свойство модели)
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");
}
}
}
как бы вы это использовали? –
Пожалуйста, прочитайте вопрос. "TEST.PropertyName();" –
Он возвращает имя свойства. Это полезно в шаблоне MVVM. –