33 votes

ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter et UITypeEditor

Je vais essayer d'obtenir une compréhension globale de la façon dont vous utilisez ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter, et UITypeEditor de changer la façon d'une grille de propriété écrans et des interfaces avec un objet.

Quelqu'un peut-il me dire si cela est juste, ou si j'ai raté tous les grands concepts ou des points? Je suis vraiment juste essayer de comprendre pourquoi et lorsque vous utilisez chaque classe.

ICustomTypeDescriptor

  • L'implémentation de cette interface dans une classe totalement remplace le natif de propriétés d'une classe et les remplace par le PropertyDescriptors retourné par ICustomTypeDescriptor.GetProperties()

TypeDescriptionProvider

  • Utilisé pour étendre sur les propriétés d'une classe
  • Un TypeDescriptionProvider est ajouté à une classe par le biais d'un attribut TypeDescriptionProvider
  • Le GetTypeDescriptor() la méthode de la TypeDescriptionProvider retourne un ICustomTypeDescriptor pour être annexé à l'existant propriétés du type.
  • Une grille des propriétés affiche à la fois les propriétés de la classe a trouvé par le biais de la Réflexion, et les propriétés ajoutées à la classe par le biais de la TypeDescriptionProvider

TypeConverter

  • Conversion entre les types de
  • En termes d'utilisation d'un PropetyGrid utilisé pour la conversion entre les types complexes et les types primitifs qui peuvent être affichés et modifiés dans la grille des propriétés.
  • Le GetStandard valeurs de la méthode de l'TypeConverter peut également être utilisé pour afficher une liste de valeurs possibles dans la grille des propriétés

UITypeEditor

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

Donc ICustomTypeDescriptor un TypeDescription fournisseur sont utilisés pour ajouter/modifier/remplacer l'ensemble des propriétés des objets. TypeConverter et UITypeEditor sont appliqués aux propriétés individuelles et de contrôler la manière dont ces propriétés spécifiques sont interfacés avec.

33voto

Marc Gravell Points 482669

Tweaks:

  • TypeDescriptionProvider

    • encore remplace les métadonnées (ne s'étend)
    • peuvent également être ajoutés être TypeDescriptor.AddProvider
    • peut être appliqué par-type ainsi que par exemple, en rendant possible l'appliquer à des listes sans avoir à mettre en oeuvre ITypedList
  • TypeConverter

    • pour PropertyGrid, ce qui est également le mécanisme utilisé pour obtenir les métadonnées; à noter que l' ExpandableObjectConverter simplement délégués TypeDescriptor.GetProperties, mais ce n'est pas toujours le cas
    • également responsable de la re-création des objets immuables (comme les structures) avec des changements
  • UITypeEditor

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

Supplémentaires:

  • IExtenderProvider - ajoute des propriétés; ce peut être ce que vous étiez de se confondre avec l' TypeDescriptionProvider
  • ITypedList - largement le double de l' ICustomTypeDescriptor, mais pour les listes; peut être évité par l'utilisation d' TypeDescriptionProvider et un non-objet de l'indexeur sur n'importe quel IList, c'est à dire public T this[int index] {get;}
  • IListSource - offre d'indirection entre une source de données, et les données; par exemple, un DataTable implémente IListSource, revenant DefaultView lorsqu'il est demandé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X