如何RaisePropertyChanged 发现属性名称?(How RaisePropert

2019-07-29 02:15发布

有一个在该方法的一个重载NotificationObject : -

protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);

我们写在财产的setter方式如下:

RaisePropertyChanged(() => PropertyVariable);

它是如何工作的? 它是如何找到该属性的名字在这个Lambda表达式的?

Answer 1:

一个Expression<TDelegate>表示lambda表达式的抽象语法树。 所以,你只需要分析这个语法树找出属性名:

protected void RaisePropertyChanged<T>(Expression<Func<T>> 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);
}


文章来源: How RaisePropertyChanged finds out the property name?