Динамическое добавление атрибутов уровня свойства с помощью TypeDescriptor для PropertyGrid.
-
18-09-2019 - |
Вопрос
Я хочу добавлять атрибуты (например, Browsable(false)) динамически при отображении в сетке.Сценарий таков: у меня есть собственный класс с некоторыми общедоступными свойствами.Однако я не хочу, чтобы все общедоступные свойства отображались в пользовательском интерфейсе.Есть ли выход?
Я попробовал использовать TypeDescriptor.Однако он работает только на уровне типа, а не на уровне свойства.Я не смог найти никакой помощи о том, как использовать его на уровне свойства.
Любые указатели будут высоко оценены.
Решение
На самом деле это возможно, но я должен признать, что это довольно неясно и плохо документировано.Ключевым моментом является получение собственного TypeDescriptorProvider из System.ComponentModel.TypeDescriptionProvider.Затем вы можете вернуть свой собственный потомок TypeDescriptor.
Я сделал это, чтобы исправить довольно неприятное ограничение, касающееся моделей представления и метаданных в ASP.NET MVC, но вы также можете использовать его для вставки собственных дополнительных метаданных.
Другие советы
Последние несколько дней я работаю в этой же области.Короче говоря, я пришел к выводу, что это невозможно.
Является ли причина, по которой вы пытаетесь применить атрибуты во время выполнения, тем, что вы не хотите смешивать код «UI» с вашими пользовательскими классами?
Если это так, то BrowsableAttribute
является членом ComponentModel (http://msdn.microsoft.com/en-us/library/system.comComponentmodel.aspx) и не связан с пользовательским интерфейсом в том же смысле, что WinForms.
Карл