Pergunta

Qual é a diferença entre usar um PropertyDescriptor que retorna um valor para o método IsReadOnly(), e que está associada a uma ReadOnlyAttribute?

Foi útil?

Solução

A principal diferença é que esta permite-lhe aproveitar mais controle se você fornecer sua própria implementação PropertyDescriptor (via ICustomTypeDescriptor, TypeDescriptionProvider ou TypeConverter). Então você pode escolher o seu própria lógica para quando é gravável -. Por exemplo, com base em direitos de acesso

Mas sim; sob a implementação padrão, ele irá informar somente leitura para propriedades sem setters, e para as propriedades marcadas com ReadOnlyAttribute.

Outras dicas

Não há diferença quando eu olhar para ele com refletor.

Um dos classe derivada SimplePropertyDescriptor tem o seguinte código.


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

Apenas uma nota.

Passei um dia implementar ICustomTypeDescriptor para os objetos de entidade no meu aplicativo, a fim de controlar o estado de somente leitura de cada entidade individualmente.

Assim, cada implementação PropertyDescriptor manteve uma referência para o objeto de entidade veio, portanto, a propriedade IsReadOnly foi algo como isto:

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

No entanto, quando eu corri o código do componente BindingSource ler um conjunto de PropertyDescriptor s dos GetProperties () do ICustomTypeDescriptor para cada registro no conjunto, no entanto, quando se verificou o valor da IsReadOnly, ele só testou o PropertyDescriptor obtido a partir do primeiro registro.

completa perda de tempo !!!!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top