Domanda

Sto cercando di ottenere una comprensione generale di come utilizzare ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter e UITypeEditor per modificare il modo in cui un PropertyGrid viene visualizzato e si interfaccia con un oggetto.

Qualcuno può dirmi se è giusto o se ho tralasciato qualche concetto o punto importante?Sto davvero solo cercando di capire perché e quando utilizzeresti ogni lezione.

ICustomTypeDescriptor

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

TipoDescrizioneProvider

  • Utilizzato per estendere le proprietà esistenti di una classe
  • Un TypeDescriptionProvider viene aggiunto a una classe tramite un attributo TypeDescriptionProvider
  • Il metodo GetTypeDescriptor() di TypeDescriptionProvider restituisce un ICustomTypeDescriptor aggiunto alle proprietà esistenti del tipo.
  • Un PropertyGrid mostrerà sia le proprietà della classe trovata tramite Reflection, sia le proprietà aggiunte alla classe tramite TypeDescriptionProvider

TypeConverter

  • Converte tra tipi
  • In termini di utilizzo di un PropetyGrid utilizzato per la conversione tra tipi complessi e tipi primitivi che possono essere visualizzati/modificati nella griglia delle proprietà.
  • Il metodo GetStandardvalues ​​di un TypeConverter può essere utilizzato anche per mostrare un elenco di possibili valori nella propertygrid

UITypeEditor

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

Pertanto 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 vengono interfacciate tali proprietà specifiche.

È stato utile?

Soluzione

Ritocchi:

  • TypeDescriptionProvider

    • Ancora sostituisce metadati (non estesi)
    • può anche essere aggiunto essere TypeDescriptor.AddProvider
    • può essere applicato per tipo e per istanza, rendendo possibile l'applicazione agli elenchi senza dover implementare ITypedList
  • TypeConverter

    • per PropertyGrid, questo è anche il meccanismo utilizzato per ottenere i metadati;notare che ExpandableObjectConverter semplicemente delega a TypeDescriptor.GetProperties, ma non è sempre così
    • responsabile anche della ricreazione di oggetti immutabili (come le strutture) con modifiche
  • UITypeEditor

    • responsabile anche della verniciatura della casella di anteprima PropertyGrid

Ulteriori:

  • IExtenderProvider - aggiunge proprietà;questo potrebbe essere ciò con cui ti stavi confondendo TypeDescriptionProvider
  • ITypedList - sostanzialmente il gemello di ICustomTypeDescriptor, ma per gli elenchi;può essere evitato utilizzando TypeDescriptionProvider e un indicizzatore non oggetto su any IList, cioè. public T this[int index] {get;}
  • IListSource - fornisce un collegamento indiretto tra una fonte di dati e i dati;per esempio, a DataTable implementa IListSource, tornando DefaultView quando richiesto
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top