目前这个方法的一个重载 NotificationObject
: -
There is one overload of this method in NotificationObject
:-
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);
我们写在财产的setter方法如下:
We write in the following way in the setter of property:
RaisePropertyChanged(() => PropertyVariable);
它是如何工作的?它是如何找到的属性名出这LAMBDA EX pression?
How does it works ? How it finds the property name out of this Lambda expression ?
这是防爆pression&LT; TDelegate&GT;
重presents的抽象语法树拉姆达EX pression。所以,你只需要分析这个语法树,找出属性名称:
An Expression<TDelegate>
represents the abstract syntax tree of the lambda expression. So you just have to analyze this syntax tree to find out the property name:
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);
}