De um uityPeeditor, recupere um atributo aplicado ao pai de uma propriedade em .NET
-
21-09-2019 - |
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:
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