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);
}

关于.net - RaisePropertyChanged <T>如何找出属性名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10243327/

10-12 04:30