c# - ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter y UITypeEditor
propertygrid (1)
Ajustes:
TypeDescriptionProvider
- aún reemplaza los metadatos (no se extiende)
- también se puede agregar sea
TypeDescriptor.AddProvider
- se puede aplicar por tipo, así como por instancia, lo que permite aplicar a listas sin tener que implementar
ITypedList
TypeConverter
- para
PropertyGrid
, este es también el mecanismo utilizado para obtener metadatos; tenga en cuenta queExpandableObjectConverter
simplemente delega aTypeDescriptor.GetProperties
, pero este no es siempre el caso - también es responsable de recrear objetos inmutables (como estructuras) con cambios
- para
UITypeEditor
- también es responsable de pintar el cuadro de vista previa en
PropertyGrid
- también es responsable de pintar el cuadro de vista previa en
Adicional:
-
IExtenderProvider
: agrega propiedades; esto puede ser lo que te confundieron conTypeDescriptionProvider
-
ITypedList
: ampliamente el gemelo deICustomTypeDescriptor
, pero para listas; se puede evitar mediante el uso deTypeDescriptionProvider
y un indexador no objeto en cualquierIList
, es decir,public T this[int index] {get;}
-
IListSource
: proporciona indirección entre una fuente de datos y los datos; por ejemplo, unDataTable
implementaIListSource
, devolviendoDefaultView
cuando se solicita
Estoy tratando de obtener una comprensión general de cómo se usan ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter y UITypeEditor para cambiar la forma en que un PropertyGrid muestra e interactúa con un objeto.
¿Puede alguien decirme si esto es correcto, o si me perdí algún concepto o punto importante? Realmente estoy tratando de entender por qué y cuándo usarías cada clase.
ICustomTypeDescriptor
- La implementación de esta interfaz en una clase anula por completo las propiedades nativas de una clase y las reemplaza con los PropertyDescriptors devueltos por ICustomTypeDescriptor.GetProperties ()
TypeDescriptionProvider
- Se usa para ampliar las propiedades existentes de una clase
- Un TypeDescriptionProvider se agrega a una clase a través de un atributo TypeDescriptionProvider
- El método GetTypeDescriptor () del TypeDescriptionProvider devuelve un ICustomTypeDescriptor para adjuntar a las propiedades existentes del tipo.
- Un PropertyGrid mostrará tanto las propiedades de la clase encontrada a través de Reflection, como las propiedades añadidas a la clase a través del TypeDescriptionProvider
TypeConverter
- Convierte entre tipos
- En términos de usar un PropetyGrid utilizado para convertir entre tipos complejos y tipos primitivos que se pueden mostrar / editar en la cuadrícula de propiedades.
- El método de valores GetStandard de un TypeConverter también se puede usar para mostrar una lista de valores posibles en la propiedad grid
UITypeEditor
- Define un editor personalizado para manipular una propiedad de un tipo complejo.
- Asociado con una propiedad a través de un atributo.
Por lo tanto, ICustomTypeDescriptor es un proveedor TypeDescription que se usa para agregar / cambiar / reemplazar propiedades completas de objetos. TypeConverter y UITypeEditor se aplican a propiedades individuales y controlan cómo se interconectan esas propiedades específicas.