2009-08-19 4 views
6

Quiero agregar atributos (como Browsable (falso)) de forma dinámica mientras se muestran en la cuadrícula. El escenario es que tengo una clase personalizada con algunas propiedades públicas. Sin embargo, no quiero que se muestren todas las propiedades públicas en la IU. ¿Hay una salida?Agregue atributos de nivel de propiedad dinámicamente mediante TypeDescriptor para PropertyGrid

Intenté usar TypeDescriptor. Sin embargo, funciona solo en el nivel de tipo y no en el nivel de propiedad. No pude encontrar ninguna ayuda sobre cómo usarlo a nivel de propiedad.

Cualquier puntero será muy apreciado.

+0

Es posible, he proporcionado una implementación completa en mi pregunta http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedescriptor-at-runtime/12143653 – Gman

Respuesta

2

En realidad, es posible, pero tengo que admitir que es bastante oscura y mal documentado. La clave es derivar su propio TypeDescriptorProvider personalizado de System.ComponentModel.TypeDescriptionProvider. Luego puede devolver su propio descendiente TypeDescriptor.

Lo hice para arreglar una limitación desagradable con respecto a ViewModels y metadatos en ASP.NET MVC, pero también puede usarlo para insertar sus propios metadatos adicionales.

3

He estado trabajando en esta misma área durante los últimos días. Para resumir, llegué a la conclusión de que esto no es posible.

¿Es el motivo por el que está intentando aplicar atributos en tiempo de ejecución porque no quiere mezclar el código "UI" con sus clases personalizadas?

Si ese es el caso, el BrowsableAttribute es un miembro de la ComponentModel (http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx) y no es la interfaz de usuario relacionadas en el mismo sentido que WinForms.

Karl

Cuestiones relacionadas