Добавляйте атрибуты уровня свойства динамически, используя TypeDescriptor для PropertyGrid - PullRequest
6 голосов
/ 19 августа 2009

Я хочу добавить атрибуты (например, Browsable (false)) динамически при отображении в сетке. Сценарий таков, что у меня есть пользовательский класс с некоторыми общедоступными свойствами. Однако я не хочу, чтобы все открытые свойства отображались в пользовательском интерфейсе. Есть ли выход?

Я пытался использовать TypeDescriptor. Однако он работает только на уровне типов, а не на уровне свойств. Я не смог найти какую-либо помощь в том, как использовать его на уровне свойств.

Любые указатели будут высоко оценены.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2009

Я работаю в этой же области последние несколько дней.Короче говоря, я пришел к выводу, что это невозможно.

Является ли причиной того, что вы пытаетесь применить атрибуты во время выполнения, потому что вы не хотите смешивать код "UI" с вашими пользовательскими классами?

Если это так, то BrowsableAttribute являетсячлен ComponentModel (http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx) и не связан с пользовательским интерфейсом в том же смысле, что и WinForms.

Karl

2 голосов
/ 11 апреля 2011

На самом деле это возможно, но я должен признать, что это довольно неясно и плохо документировано. Ключ заключается в получении вашего собственного пользовательского TypeDescriptorProvider из System.ComponentModel.TypeDescriptionProvider. Затем вы можете вернуть своего потомка TypeDescriptor.

Я сделал это, чтобы исправить довольно неприятное ограничение в отношении ViewModels и метаданных в ASP.NET MVC, но вы также можете использовать его для вставки собственных дополнительных метаданных.

...