有沒有可能重寫這個擴展方法的參數?是否有可能重寫這個棘手的擴展方法?
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();
詩篇。我對這種方法的靜態版本不感興趣!
對於那些怎麼看不到這個功能的重點。 在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");
}
}
}
你會如何使用它? – 2010-10-29 05:50:16
請仔細閱讀該問題。 「TEST.PropertyName();」 – 2010-10-29 05:51:23
它返回屬性的名稱。這在MVVM模式中很有用。 – 2010-10-29 05:55:31