早些时候我曾:
const string FooPropertyName = "Foo";
我在做:
RaisePropertyChanged(FooPropertyName);
我还在实现IDataErrorInfo
界面,如下所示:
public string this[string columnName]
{
get
{
switch(columnName)
{
case FooPropertyName:
return CheckFoo();
default: return null;
}
}
}
现在我想切换到lambda语法并省略字符串常量
RaisePropertyChanged(() => Foo);
如何实施IDataErrorInfo
?
答案 0 :(得分:2)
您可以以类似的方式获取属性名称
protected string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
var memberExpr = propertyExpression.Body as MemberExpression;
if (memberExpr == null) throw new ArgumentException("propertyExpression should represent access to a member");
return memberExpr.Member.Name;
}
然后像这样使用它
if (columnName == GetPropertyName<MyClass>(() => Foo))
return CheckFoo();
答案 1 :(得分:0)
之前我没有使用MVVM Light,所以这更多是为了提供信息而不是答案,但我知道为了不为{{1}提供属性名称} event,您需要使用CallerMemberNameAttribute
Class。根据链接页面,这个
允许您获取方法
的调用者的方法或属性名称
但是,此属性仅在.NET 4.5中添加,因此如果您不使用此版本,那么您将无法使用它。
它应该在您要自动提供成员名称的输入参数之前使用...在您的情况下,在INotifyPropertyChanged.PropertyChanged
方法中:
RaisePropertyChanged