12

このメソッドのオーバーロードが1つありますNotificationObject:-

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

プロパティのセッターには次のように記述します。

RaisePropertyChanged(() => PropertyVariable);

それはどのように機能しますか?このラムダ式からプロパティ名をどのように見つけますか?

4

1 に答える 1

16

AnExpression<TDelegate>は、ラムダ式の抽象構文木を表します。したがって、この構文ツリーを分析して、プロパティ名を見つける必要があります。

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);
}
于 2012-04-20T09:15:57.873 に答える