使用INOTifyPropertyChanged时,使用TypeDescriptor检查有效的propertyName

时间:2010-12-31 18:04:32

标签: c# inotifypropertychanged verification

使用INotifyPropertyChanged时,我的问题更像是一种良好做法。

我已经创建了一个实现INotifyPropertyChanged的基类,目的是在大多数自定义视图模型绑定环境中使用此类。

基本上我有一个DispatchPropertyChange方法,它接受属性更改的名称(字符串)。这很简单,但字符串显然容易出错。

我想在调度之前验证属性是否有效,但我不确定这是否是一个好方法。到目前为止,我的帮助函数看起来像这样。

private void ValidateProperty( string prop )
{
    if( TypeDescriptor.GetProperties(this)[prop] == null )
    {
        //throw error
    }
} 

我认为这种策略可能会减慢速度。 有没有人有另一种方法或验证属性名称有效的方法?

2 个答案:

答案 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)

或者您可以在编译时进行属性名称验证

NotifyPropertyWeaver