Динамическое добавление атрибутов уровня свойства с помощью TypeDescriptor для PropertyGrid.

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

Вопрос

Я хочу добавлять атрибуты (например, 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.

Карл

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top