c# propertygrid typeconverter uitypeeditor customtypedescriptor

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 que ExpandableObjectConverter simplemente delega a TypeDescriptor.GetProperties , pero este no es siempre el caso
    • también es responsable de recrear objetos inmutables (como estructuras) con cambios
  • UITypeEditor

    • también es responsable de pintar el cuadro de vista previa en PropertyGrid

Adicional:

  • IExtenderProvider : agrega propiedades; esto puede ser lo que te confundieron con TypeDescriptionProvider
  • ITypedList : ampliamente el gemelo de ICustomTypeDescriptor , pero para listas; se puede evitar mediante el uso de TypeDescriptionProvider y un indexador no objeto en cualquier IList , es decir, public T this[int index] {get;}
  • IListSource : proporciona indirección entre una fuente de datos y los datos; por ejemplo, un DataTable implementa IListSource , devolviendo DefaultView 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.