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 queExpandableObjectConvertersimplemente 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 deTypeDescriptionProvidery 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, unDataTableimplementaIListSource, devolviendoDefaultViewcuando 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.