Dot-Net

RaisePropertyChanged<T> 如何找出屬性名稱?

  • April 20, 2012

此方法有一個重載NotificationObject:-

protected void RaisePropertyChanged&lt;T&gt;(Expression&lt;Func&lt;T&gt;&gt; propertyExpression);

我們在property的setter中這樣寫:

RaisePropertyChanged(() =&gt; PropertyVariable);

它是如何工作的?它如何從這個 Lambda 表達式中找到屬性名稱?

AnExpression&lt;TDelegate&gt;表示 lambda 表達式的抽象語法樹。因此,您只需分析此語法樹即可找出屬性名稱:

protected void RaisePropertyChanged&lt;T&gt;(Expression&lt;Func&lt;T&gt;&gt; propertyExpression)
{
   var memberExpr = propertyExpression.Body as MemberExpression;
   if (memberExpr == null)
       throw new ArgumentException("propertyExpression should represent access to a member");
   string memberName = memberExpr.Member.Name;
   RaisePropertyChanged(memberName);
}

引用自:https://stackoverflow.com/questions/10243327