Pregunta

¿Cuál es la diferencia entre usar una PropertyDescriptor que devuelve un valor para el método IsReadOnly(), y una de ellas asociada con una ReadOnlyAttribute?

¿Fue útil?

Solución

La diferencia principal es que esto permite a aprovechar un mayor control si proporciona su propia implementación PropertyDescriptor (a través de ICustomTypeDescriptor, TypeDescriptionProvider o TypeConverter). A continuación, puede elegir su propia lógica para cuando se puede escribir -. Por ejemplo, sobre la base de los derechos de acceso

Pero sí; bajo la aplicación por defecto, se informará de sólo lectura para los emisores de propiedades sin, y de las propiedades marcadas con ReadOnlyAttribute.

Otros consejos

No hay diferencia cuando lo miro usando reflector.

Uno de los SimplePropertyDescriptor clase derivada tiene el código siguiente.


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

Una cosa rápida.

pasé un día implementación ICustomTypeDescriptor para los objetos de entidad en mi aplicación, con el fin de controlar el estado de sólo lectura de cada entidad por separado.

Por lo tanto, cada aplicación PropertyDescriptor mantiene una referencia al objeto de entidad viene, por lo que la propiedad IsReadOnly fue algo como esto:

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

Sin embargo, sin embargo cuando me encontré con el código del componente BindingSource leer un conjunto de PropertyDescriptor s de los GetProperties () de ICustomTypeDescriptor para cada registro en el conjunto,, cuando se comprueba el valor de IsReadOnly, sólo se probó la PropertyDescriptor obtenida desde el primer registro.

pérdida total de tiempo !!!!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top