Question

Je suis en train d'obtenir une compréhension globale de la façon dont vous utilisez ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter et UITypeEditor changer l'affichage d'un PropertyGrid et les interfaces avec un objet.

Quelqu'un peut-il me dire si cela est juste, ou si je manqué les principaux concepts ou des points? Je suis vraiment juste essayer de comprendre pourquoi et quand vous utiliserez chaque classe.

ICustomTypeDescriptor

  • La mise en œuvre de cette interface dans une classe remplace les propriétés natives totaly d'une classe et les remplace par les propertyDescriptors retournés par ICustomTypeDescriptor.GetProperties ()

TypeDescriptionProvider

  • Permet d'étendre les propriétés existantes d'une classe
  • Un TypeDescriptionProvider est ajouté à une classe par un attribut TypeDescriptionProvider
  • La méthode GetTypeDescriptor () du TypeDescriptionProvider retourne un ICustomTypeDescriptor être en annexe pour les propriétés existantes du type.
  • Un PropertyGrid indique à la fois les propriétés de la classe trouvée par la réflexion, et les propriétés ajoutées à la classe par la TypeDescriptionProvider

TypeConverter

  • entre les types Convertit
  • En ce qui concerne l'utilisation d'un PropetyGrid utilisé pour convertir les types complexes et les types primitifs qui peuvent être affichés / modifiés dans la grille de la propriété.
  • La méthode des valeurs GetStandard d'un TypeConverter peut également être utilisé pour afficher une liste de valeurs possibles dans PropertyGrid

UITypeEditor

  • Définit un éditeur personnalisé pour manipuler une propriété d'un type complexe.
  • Associé à une propriété par un attribut.

ICustomTypeDescriptor un fournisseur de TypeDescription sont utilisés pour ajouter / modifier / remplacer les propriétés entières d'objets. TypeConverter et UITypeEditor sont appliqués aux propriétés individuelles et contrôler la façon dont ces propriétés spécifiques sont interfacés avec.

Était-ce utile?

La solution

Tweaks:

  • TypeDescriptionProvider

    • encore remplace métadonnées (étend non)
    • On peut également ajouter être TypeDescriptor.AddProvider
    • peut être appliqué par type, ainsi que par instance, permettant d'appliquer aux listes sans avoir à mettre en œuvre ITypedList
  • TypeConverter

    • pour PropertyGrid, ceci est également le mécanisme utilisé pour obtenir des métadonnées; noter que ExpandableObjectConverter simplement les délégués à TypeDescriptor.GetProperties, mais ce n'est pas toujours le cas
    • également responsable des objets immuables recréer (comme struct) avec les modifications
  • UITypeEditor

    • également responsable de la peinture de la zone d'aperçu dans PropertyGrid

supplémentaire:

  • IExtenderProvider - ajoute propriétés; cela peut être ce que vous se confondre avec TypeDescriptionProvider
  • ITypedList - largement le double de ICustomTypeDescriptor, mais pour les listes; peut être évitée par l'utilisation d'TypeDescriptionProvider et un indexeur non-objet sur un IList, à savoir public T this[int index] {get;}
  • IListSource - fournit indirection entre une source de données et les données; par exemple, un DataTable implémente IListSource, retour DefaultView sur demande
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top