使用INotifyPropertyChanged时,我的问题更像是一种良好做法。
我已经创建了一个实现INotifyPropertyChanged的基类,目的是在大多数自定义视图模型绑定环境中使用此类。
基本上我有一个DispatchPropertyChange方法,它接受属性更改的名称(字符串)。这很简单,但字符串显然容易出错。
我想在调度之前验证属性是否有效,但我不确定这是否是一个好方法。到目前为止,我的帮助函数看起来像这样。
private void ValidateProperty( string prop )
{
if( TypeDescriptor.GetProperties(this)[prop] == null )
{
//throw error
}
}
我认为这种策略可能会减慢速度。 有没有人有另一种方法或验证属性名称有效的方法?
答案 0 :(得分:2)
处理松散类型的INotifyPropertyChanged.PropertyChanged
问题的许多实现(通常是轻微差异)都存在。
一个example的部分位于下方;这涉及到您的null
支票......
protected void RaiseChanged<TProperty>(Expression<Func<TProperty>> propertyExpresion)
{
var property = propertyExpresion.Body as MemberExpression;
if (property == null || !(property.Member is PropertyInfo) ||
!IsPropertyOfThis(property))
{
throw new ArgumentException(string.Format(
CultureInfo.CurrentCulture,
"Expression must be of the form 'this.PropertyName'. Invalid expression '{0}'.",
propertyExpresion), "propertyBLOCKED EXPRESSION;
}
this.OnPropertyChanged(property.Member.Name);
}
答案 1 :(得分:0)
或者您可以在编译时进行属性名称验证