ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter et UITypeEditor
-
09-09-2019 - |
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.
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 queExpandableObjectConverter
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
- pour
-
UITypeEditor
- également responsable de la peinture de la zone d'aperçu dans
PropertyGrid
- également responsable de la peinture de la zone d'aperçu dans
supplémentaire:
-
IExtenderProvider
- ajoute propriétés; cela peut être ce que vous se confondre avecTypeDescriptionProvider
-
ITypedList
- largement le double deICustomTypeDescriptor
, mais pour les listes; peut être évitée par l'utilisation d'TypeDescriptionProvider
et un indexeur non-objet sur unIList
, à savoirpublic T this[int index] {get;}
-
IListSource
- fournit indirection entre une source de données et les données; par exemple, unDataTable
implémenteIListSource
, retourDefaultView
sur demande