早些时候我有:
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
发布于 2014-05-19 02:37:14
您可以以类似的方式获取属性名称。
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();
发布于 2014-05-19 02:22:04
我以前没有使用MVVM,所以这更多地是为了提供信息,而不是为了回答,但我确实知道,为了不向INotifyPropertyChanged.PropertyChanged
事件提供属性名称,您需要使用 Class。根据链接的页面,
允许您获取方法调用方的方法或属性名称。
但是,这个属性只是在.NET 4.5中添加的,所以如果您不使用该版本,那么您将无法使用它。
它应该在输入参数之前使用,您想要自动将成员名提供给.在您的例子中,在RaisePropertyChanged
方法中:
public override void RaisePropertyChanged([CallerMemberName] string propertyName)
{
...
}
https://stackoverflow.com/questions/23733461
复制相似问题