ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter y UITypeEditor
-
09-09-2019 - |
Pregunta
Estoy tratando de conseguir una comprensión general de cómo se utiliza ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter y UITypeEditor para cambiar la forma de un PropertyGrid pantallas e interfaces con un objeto.
Puede alguien decirme si esto es correcto, o si se perdió ningún conceptos principales o puntos? Realmente estoy tratando de entender por qué y cuando se usaría cada clase.
ICustomTypeDescriptor
- La implementación de esta interfaz en una clase anula totalmente las propiedades nativas de una clase y los reemplaza por los PropertyDescriptors devueltos por ICustomTypeDescriptor.GetProperties ()
TypeDescriptionProvider
- Se utiliza para extender sobre las propiedades existentes de una clase
- A TypeDescriptionProvider se anexa a una clase a través de un atributo TypeDescriptionProvider
- El método GetTypeDescriptor () de la TypeDescriptionProvider devuelve un ICustomTypeDescriptor ser anexa a las propiedades existentes del tipo.
- A PropertyGrid mostrará tanto las propiedades de la clase encontrado a través de la reflexión, y las propiedades agregado a la clase a través de la TypeDescriptionProvider
TypeConverter
- Convierte entre tipos
- En términos de uso de un PropetyGrid utiliza para convertir entre tipos complejos y tipos primitivos que se pueden mostrar / editados en la rejilla de propiedades.
- El método valores GetStandard de un TypeConverter también se puede utilizar para mostrar una lista de posibles valores en el PropertyGrid
UITypeEditor
- Define un editor personalizado para manipular una propiedad de un tipo complejo.
- asociada con una propiedad a través de un atributo.
Así ICustomTypeDescriptor un proveedor TypeDescription se utiliza para añadir / cambiar / reemplazar propiedades enteras de objetos. TypeConverter y UITypeEditor se aplican a las propiedades individuales y controlar cómo esas propiedades específicas están interconectados con.
Solución
Ajustes:
-
TypeDescriptionProvider
- Todavía reemplaza de metadatos (no se extiende)
- también puede añadirse ser
TypeDescriptor.AddProvider
- se puede aplicar por tipo, así como por instancia, por lo que es posible aplicar a las listas sin tener que implementar
ITypedList
-
TypeConverter
- para
PropertyGrid
, este es también el mecanismo utilizado para obtener los metadatos;ExpandableObjectConverter
en cuenta que simplemente delegados aTypeDescriptor.GetProperties
, pero esto no es siempre el caso - también responsable de volver a crear objetos inmutables (como estructuras) con cambios
- para
-
UITypeEditor
- también responsable de pintar el cuadro de vista previa en
PropertyGrid
- también responsable de pintar el cuadro de vista previa en
adicional:
-
IExtenderProvider
- añade propiedades; esto puede ser lo que está confundiendo conTypeDescriptionProvider
-
ITypedList
- ampliamente el gemelo deICustomTypeDescriptor
, pero para las listas; se puede evitar mediante el uso deTypeDescriptionProvider
y un indexador no objeto en cualquierIList
, es decirpublic T this[int index] {get;}
-
IListSource
- proporciona indirección entre una fuente de datos y los datos; por ejemplo, unDataTable
implementaIListSource
, volviendoDefaultView
cuando solicitado