Pergunta

Não é tão simples quanto o título diz, mas espero que você entenda.

Considere este cenário:

Class MyClass

    Property SubProp1
    End Property

    -TypeEditor(whatever)- 
    Property SubProp2
    End Property

End Class

Class MyButton
    Inherits Button

    -MyCustomAttribute-
    Property MC as MyClass
    End Property

End Class

Em seguida, coloquei uma instância do MyButton em uma grade de propriedades, expanda a propriedade MC e edito subprop2.

Do editor de tipos do Subprop2, quero obter o atributo aplicado à propriedade MC.

Olhando para o contexto, PropertyDescriptor.componentType, chegamos ao Tipo: MyClass. Se eu olhar para os atributos aplicados ao MyClass, ele retornará apenas os atributos aplicados diretamente ao MyClass, e não o atributo extra aplicado à propriedade MC.

Estou lutando para voltar ao MC para poder ler os atributos aplicados lá. Alguém alguma idéia?

ETA:

Eu respondi abaixo:

Foi útil?

Solução 2

Na verdade, mais para o meu comentário para Thomas, isso é possível sem vincular tardio. Aqui está como:

DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.

Pronto!

Outras dicas

Se eu olhar para os atributos aplicados ao MyClass, ele retornará apenas os atributos aplicados diretamente ao MyClass, e não o atributo extra aplicado à propriedade MC.

O atributo adicionado ao MC A propriedade não é "adicionada" aos atributos aplicados ao MyClass A classe ... atributos são metadados estáticos, você não terá um atributo extra em MyClass Só porque uma propriedade do tipo MyClass tem esse atributo. Não há relação entre os dois.

Não há como myclass recuperar os atributos da propriedade MC, a menos que você os recupere diretamente do MyButton classe, através da reflexão:

Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)

Mas você não poderá recuperar esses atributos usando TypeDescriptor, já que só pode fornecer os atributos definidos no tipo, não nas propriedades

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