Desde un UITypeEditor, recuperar un atributo aplicado a la matriz de una propiedad en .net
-
21-09-2019 - |
Pregunta
No es tan simple como dice el título, pero espero que usted entiende.
Considere este escenario:
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
A continuación, me puso una instancia de MiBoton en una cuadrícula de propiedades, expanda la propiedad MC y editar SubProp2.
Desde el editor de tipo para SubProp2, quiero controlar la atributo aplicado a la propiedad MC.
Mirando el contexto, PropertyDescriptor.ComponentType, llegamos a Tipo: MiClase. Si miro a los atributos aplicados a MiClase, sin embargo, sólo devolverá los atributos aplicados directamente a MiClase, y no el atributo adicional aplicada a la propiedad MC.
yo estoy ahí luchando para volver a MC para que pueda leer los atributos aplicados. Cualquier persona alguna idea?
ETA:
He respondido a continuación:
Solución 2
En realidad, más que mi comentario a Thomas, esto es posible sin fines de unión. He aquí cómo:
DirectCast(context, GridItem).Parent.PropertyDescriptor.Attributes.
Voila!
Otros consejos
Si miro a los atributos aplicados a MiClase, sin embargo, será sólo devuelven los atributos aplicados directamente a MiClase, y no el atributo adicional aplicada a la propiedad MC.
El atributo añadido a la propiedad MC
no están "agregado" a los atributos aplica a la clase MyClass
... atributos son metadatos estáticos, no tendrá un atributo extra en MyClass
sólo porque una propiedad de tipo MyClass
tiene esta atributo. No hay relación entre los dos.
No hay manera de MiClase para recuperar los atributos de la propiedad MC, a menos que se recupere directamente de la clase MyButton
, a través de la reflexión:
Dim prop As PropertyInfo = GetType(MyButton).GetProperty("MC")
Dim attributes As Attribute() = Attribute.GetCustomAttributes(prop)
Sin embargo, usted no será capaz de recuperar esos atributos utilizando TypeDescriptor
, ya que sólo le puede dar los atributos definidos en el tipo, no en las propiedades