D'un UITypeEditor, récupérer un attribut appliqué au parent d'une propriété en .net
-
21-09-2019 - |
Question
Il est pas tout à fait aussi simple que le titre dit, mais je l'espère, vous comprenez.
Considérons ce scénario:
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
Ensuite, je mets une instance de MyButton dans une grille de propriétés, développez la propriété MC et modifier SubProp2.
Dans l'éditeur de type pour SubProp2, je veux saisir l'attribut appliqué à la propriété MC.
En regardant le contexte, PropertyDescriptor.ComponentType, nous arrivons à Type: MyClass. Si je regarde les attributs appliqués à MyClass, cependant, il ne retourne que les attributs appliqués directement à MyClass, et non l'attribut supplémentaire appliqué à la propriété MC.
Je me bats pour revenir à MC afin que je puisse lire les attributs qui y sont appliquées. Quelqu'un at-il des idées?
ETA:
J'ai répondu ci-dessous:
La solution 2
En fait, plus à mon commentaire à Thomas, cela est possible sans la liaison tardive. Voici comment:
DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.
Voila!
Autres conseils
Si je regarde les attributs appliqués à MyClass, cependant, il ne retourne que les attributs appliqués directement à MyClass, et non l'attribut supplémentaire appliqué à la propriété MC.
L'attribut ajouté à la propriété MC
ne sont pas « ajoutés » aux attributs appliqués aux ... attributs classe MyClass
sont des métadonnées statiques, vous ne serez pas un attribut supplémentaire sur MyClass
juste parce que une propriété de type MyClass
a cette attribut. Il n'y a pas relation entre les deux.
Il n'y a aucun moyen pour MyClass de récupérer les attributs de la propriété MC, à moins que vous les récupérer directement à partir de la classe MyButton
, par la réflexion:
Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)
Mais vous ne serez pas en mesure de récupérer ces attributs à l'aide TypeDescriptor
, car il ne peut vous donner les attributs définis sur le type, non pas sur les propriétés