除了 MemberExpression INotifyPropertyChanged (Automatically INotifyPropertyChanged)的众多实现,它们支持 UnaryExpression >。 UnaryExpression 的示例包括在表达式中使用一元运算符,例如,
RiasePropertyChanged(() => !MyPropertyName);
是否有足够的理由保证将其纳入物业名称提取?我原本认为对 UnaryExpression 的支持是因为你可以从中提取 MemberExpression 。
社区是否有与此实施相关的任何赞成/赞成,因为它与Prism NotificationObject 不同?
答案 0 :(得分:1)
我只是在有人希望支持多种方式来引用该成员的情况下才看到这一点。将其限制为UnaryExpression会略微限制您。
这并不重要......增加对两者的支持将主要是一个性能问题,但最终可能没有太大的区别。我会说支持只是为了让你不会冒险使用这种抽象的漏洞比现有的更多。
以下是我们使用的内容:
public void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> property)
{
var lambda = (LambdaExpression)property;
MemberExpression memberExpression;
if ( lambda.Body is UnaryExpression )
{
var unaryExpression = (UnaryExpression)lambda.Body;
memberExpression = (MemberExpression)unaryExpression.Operand;
}
else
{
memberExpression = (MemberExpression)lambda.Body;
}
OnPropertyChanged(memberExpression.Member.Name);
}