是什么使用返回的PropertyDescriptor方法的值的IsReadOnly()之间和一个与相关联的ReadOnlyAttribute的差,?

有帮助吗?

解决方案

主要的区别是,这可以让你抢占更多的控制,如果你提供自己的PropertyDescriptor实现(通过ICustomTypeDescriptorTypeDescriptionProviderTypeConverter)。然后,你可以选择你的自己的用于当它是可写的逻辑 - 例如,基于访问权限

但是,是;在默认实施方式中,它将报告只读属性,而无需设置器,以及用于标有ReadOnlyAttribute性质。

其他提示

没有差时,我看它使用反射。

一个派生类SimplePropertyDescriptor的具有下面的代码。


    public override bool IsReadOnly
    {
        get
        {
            return this.Attributes.Contains(ReadOnlyAttribute.Yes);
        }
    }

只是注意:

我花了一天实施ICustomTypeDescriptor在我的应用程序中的实体对象,为了单独控制每个实体的只读状态。

因此,每个的PropertyDescriptor实现保持其来自的实体对象的引用,所以IsReadOnly属性是这样的:

public override bool IsReadOnly
{
    get { return _owner.IsReadOnly;}
}

然而,当我跑BindingSource组件从所述的GetProperties()ICustomTypeDescriptor的方法读取一组的PropertyDescriptor S的集合中的每个记录中的代码,但是,当它检查IsReadOnly的值时,它仅检测所获得的的PropertyDescriptor从第一个记录。

完全是浪费时间!!!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top