有一个在该方法的一个重载NotificationObject
: -
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);
我们写在财产的setter方式如下:
RaisePropertyChanged(() => PropertyVariable);
它是如何工作的? 它是如何找到该属性的名字在这个Lambda表达式的?
有一个在该方法的一个重载NotificationObject
: -
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);
我们写在财产的setter方式如下:
RaisePropertyChanged(() => PropertyVariable);
它是如何工作的? 它是如何找到该属性的名字在这个Lambda表达式的?
一个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);
}