Da un UITypeEditor, recuperare un attributo applicata al genitore di un immobile in .net
-
21-09-2019 - |
Domanda
Non è così semplice come dice il titolo, ma spero che tu capisca.
Si consideri questo scenario:
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
Successivamente, si inserisce un'istanza di MyButton in una griglia delle proprietà, espandere immobili MC e modificare SubProp2.
Da l'editor tipo per SubProp2, voglio entrare in possesso di un attributo applicato alla proprietà MC.
Guardando il contesto, PropertyDescriptor.ComponentType, si arriva al Tipo: MyClass. Se guardo gli attributi applicati a MyClass, però, restituisce solo gli attributi applicati direttamente a MyClass, e non l'attributo in più applicata alla proprietà MC.
sto lottando per tornare a MC in modo che posso leggere gli attributi non applicate. Chiunque tutte le idee?
ETA:
Ho risposto qui sotto:
Soluzione 2
In realtà, in seguito al mio commento a Thomas, questo è possibile senza l'associazione tardiva. Ecco come:
DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.
Voila!
Altri suggerimenti
Se guardo l'attributi applicati a MyClass, però, restituisce solo gli attributi applicati direttamente a MyClass, e non l'attributo in più applicata alla proprietà MC.
L'attributo aggiunto alla proprietà MC
non vengono "aggiunti" per gli attributi applicati alla classe MyClass
... attributi sono metadati statici, non avrete un attributo in più su MyClass
solo perché una proprietà di tipo MyClass
ha questo attributo. Non c'è alcuna relazione tra i due.
Non c'è modo per MyClass per recuperare gli attributi della proprietà MC, a meno che non li recupera direttamente dalla classe MyButton
, attraverso la riflessione:
Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)
Ma non sarà in grado di recuperare quegli attributi che utilizzano TypeDescriptor
, dal momento che può solo dare gli attributi definiti dal tipo, non sulle proprietà