Aggiungere proprietà a livello di attributi dinamicamente utilizzando TypeDescriptor per PropertyGrid

StackOverflow https://stackoverflow.com/questions/1300324

Domanda

Voglio aggiungere attributi (come sfogliabile (false)) in modo dinamico durante la visualizzazione nella griglia. Scenario è che ho una classe personalizzata con alcune proprietà pubbliche. Tuttavia, non voglio tutte le proprietà pubbliche da visualizzare nell'interfaccia utente. C'è una via d'uscita?

Ho provato ad utilizzare TypeDescriptor. Tuttavia, funziona solo a livello di tipo e non a livello di proprietà. Non riuscivo a trovare alcun aiuto su come usarlo a proprietà a livello.

Tutti gli indicatori sarà molto apprezzato.

È stato utile?

Soluzione

In realtà è possibile, ma devo ammettere che è piuttosto oscuro e scarsamente documentati. La chiave è quello di ricavare il proprio TypeDescriptorProvider personalizzato da System.ComponentModel.TypeDescriptionProvider. Poi si può tornare il proprio discendente TypeDescriptor.

L'ho fatto per risolvere un piuttosto sgradevole per quanto riguarda la limitazione ViewModels e metadati in ASP.NET MVC, ma si può altrettanto bene usarlo per inserire il proprio metadati in più.

Altri suggerimenti

Ho lavorato in questa stessa area negli ultimi giorni. Per farla breve, sono arrivato alla conclusione che non è possibile.

È la ragione che si sta tentando di applicare gli attributi in fase di esecuzione, perché non volete mescolare codice "UI" con le classi personalizzate?

Se questo è il caso, il BrowsableAttribute è un membro del ComponentModel ( http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx ) e non è correlato interfaccia utente nello stesso senso di WinForms.

Karl

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top