35

Sto cercando di ottenere una comprensione generale dell'utilizzo di ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter e UITypeEditor per modificare la modalità di visualizzazione e l'interfaccia di un oggetto PropertyGrid.ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter e UITypeEditor

Qualcuno può dirmi se è giusto o se mi mancano concetti o punti importanti? Sto solo cercando di capire perché e quando useresti ogni lezione.

ICustomTypeDescriptor

  • L'implementazione di questa interfaccia in una classe sostituisce totalmente le proprietà native di una classe e li sostituisce con i PropertyDescriptors restituiti da ICustomTypeDescriptor.GetProperties()

TypeDescriptionProvider

  • utilizzato per estendere sulle proprietà esistenti di una classe
  • Un TypeDescriptionProvider viene aggiunto a una classe attraverso un attributo TypeDescriptionProvider
  • Il GetTypeDescriptor() metodo TypeDescriptionProvider restituisce un ICustomTypeDescriptor essere allegato alle proprietà esistenti del tipo
  • Un PropertyGrid mostrerà sia le proprietà della classe trovata attraverso riflessione, e le proprietà aggiunti alla classe attraverso il TypeDescriptionProvider

TypeConverter

  • converte tra tipi
  • In termini di usare PropetyGrid per convertire tra tipi complessi e tipi primitivi che possono essere visualizzati/modificati nella griglia delle proprietà.
  • I valori metodo GetStandard di un TypeConverter può essere utilizzato anche per visualizzare un elenco di possibili valori nella PropertyGrid

UITypeEditor

  • Definisce un editor personalizzato per manipolare una proprietà di un complesso genere.
  • Associato a una proprietà tramite un attributo.

Quindi ICustomTypeDescriptor e un provider TypeDescription vengono utilizzati per aggiungere/modificare/sostituire intere proprietà degli oggetti. TypeConverter e UITypeEditor vengono applicati alle singole proprietà e controllano il modo in cui queste specifiche proprietà sono interfacciate.

risposta

36

Tweaks:

  • TypeDescriptionProvider

    • ancora sostituisce metadati (non estende)
    • può anche essere aggiunto essere TypeDescriptor.AddProvider
    • possono essere applicati per tipo nonché per istanza, che consente di applicare agli elenchi senza dover implementare ITypedList
  • TypeConverter

    • per PropertyGrid, questo è anche il meccanismo utilizzato per ottenere i metadati; notare che ExpandableObjectConverter semplicemente delegati TypeDescriptor.GetProperties, ma questo non è sempre il caso
    • anche responsabile oggetti immutabili ricreare (come struct) con modifiche
  • UITypeEditor

    • anche responsabile dipingere il riquadro di anteprima nella PropertyGrid

aggiuntive:

  • IExtenderProvider - accoda proprietà; questo potrebbe essere ciò che ti è stato confuso con TypeDescriptionProvider
  • ITypedList - in generale il gemello di ICustomTypeDescriptor, ma per le liste; può essere evitata con l'uso di TypeDescriptionProvider e un indicizzatore non oggetto su qualsiasi IList, cioè public T this[int index] {get;}
  • IListSource - fornisce indiretto tra un data-sorgente e dati; ad esempio, uno DataTable implementa IListSource, restituendo DefaultView su richiesta
Problemi correlati