2012-07-02 2 views
0

Я связываю свойства Grid с кучей пользовательских объектов, которые записываются другими разработчиками. Эти объекты постоянно изменяются и обновляются, поэтому они включают свойства, которые просто бросают NotImplemented Exceptions. Иногда они включают в себя такие свойства, какПредотвращение свойстваGrid от привязки к определенным свойствам

[Устаревшей («использование штука вместо того, чтобы получить другую вещь», правда)]

Вместо раздражают другие разработчики. с вещами, которые, как я знаю, будут изменены позже. Что я могу сделать, чтобы убедиться, что мои свойства Grid не разбиваются на эти конкретные свойства?

Спасибо за помощь. другие разработчики ценят это;)

ответ

1

Я предполагаю, что вы пытаетесь связать PropertyGrid с объектами во время выполнения, а не в дизайнере. Если вы имеете в виду свойствоgrid в дизайнере winform, ответ будет другим, и вы должны посмотреть на метод postFilterEvents ControlDesigner.

Простейшим решением было бы установить для параметра BrowsableAttribute значение false для свойств, которые вы хотите скрыть. Это означает, что, когда другие разработчики добавляют ObsoleteAttribute, они должны добавить [Browsable(false)]. Но я понимаю, что вам нужно что-то более «автоматическое». Вы можете написать метод, который изменяет атрибуты, доступные для просмотра свойств объекта, прежде чем передать его в PropertyGrid. Это можно сделать, получив TypeDescriptor для каждого свойства, затем получив его BrowsableAttribute и установив его значение в соответствии с тем фактом, что существует ObsoleteAttribute или что он генерирует исключение (это нужно делать с помощью отражения, поскольку доступный просмотр является приватным) , Код может быть примерно таким:

Это должно работать, но у него есть предел. В классе, который вы редактируете, должен быть хотя бы атрибут BrowsableAttribute (не имеет значения, установлено ли оно true или false), в противном случае PropertyGrid всегда будет пустым.

Смежные вопросы