35

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.ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter y UITypeEditor

¿Puede alguien decirme si esto es correcto, o si omití 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 totalmente anula las propiedades nativas de una clase y los reemplaza por los PropertyDescriptors devueltos por ICustomTypeDescriptor.GetProperties()

TypeDescriptionProvider

  • 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 GetTypeDescriptor() de la TypeDescriptionProvider devuelve un ICustomTypeDescriptor ser adjunta 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 usar una PropetyGrid utilizada para convertir tipos complejos y tipos primitivos que se pueden mostrar/editar en la cuadrícula de propiedades.
  • El GetStandard valores de método de un TypeConverter también se puede utilizar para mostrar una lista de valores posibles en el PropertyGrid

UITypeEditor

  • Define un editor personalizado para manipular una propiedad de un complejo tipo.
  • Asociado con una propiedad mediante un atributo.

Así ICustomTypeDescriptor un proveedor TypeDescription se utilizan para añadir/cambiar/reemplazar propiedades enteras de objetos. TypeConverter y UITypeEditor se aplican a propiedades individuales y controlan cómo se interconectan esas propiedades específicas.

Respuesta

36

Tweaks:

  • TypeDescriptionProvider

    • todavía reemplaza metadatos (no se extiende)
    • también se pueden añadir ser TypeDescriptor.AddProvider
    • se pueden 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 los metadatos; en cuenta que ExpandableObjectConverter simplemente delegados a TypeDescriptor.GetProperties, pero esto no es siempre el caso
    • también responsable de la re-creación de objetos inmutables (como estructuras) con los cambios
  • UITypeEditor

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

adicional:

  • IExtenderProvider - anexa propiedades; esto puede ser lo que confundir con TypeDescriptionProvider
  • ITypedList - ampliamente el gemelo de ICustomTypeDescriptor, pero para las listas; se puede evitar mediante el uso de TypeDescriptionProvider y un indexador no objeto en 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 lo solicite
Cuestiones relacionadas