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.

¿Fue útil?

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 a TypeDescriptor.GetProperties, pero esto no es siempre el caso
    • también responsable de volver a crear objetos inmutables (como estructuras) con cambios
  • UITypeEditor

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

adicional:

  • IExtenderProvider - añade propiedades; esto puede ser lo que está confundiendo 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 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, volviendo DefaultView cuando solicitado
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top