Изменить поведение по умолчанию PropertyGrid и TypeConverterAttribute - PullRequest
2 голосов
/ 13 января 2011

Я использую сетку свойств для редактирования, среди прочего, коллекции элементов: alt text

Поведение по умолчанию для коллекции предусматривает кнопку + для редактирования каждого элемента массива.

Я использую форму для редактирования этого поля, которое уже подключено, но я хочу удалить возможность для пользователя редактировать массив с помощью 'expander'

Так бы это выглядело так:

alt text

UPDATE1: сделал ProductIds свойством IList вместо int [] Теперь делает это:

alt text

-----------------!

UPDATE2: сделал ProductIds пользовательским классом, например,

 MyWrappedCollection : IEnumerable<int>

теперь это выглядит так:

alt text

Конечно, он по-прежнему показывает [+], но не распространяется ни на что (т.е. исчезает при нажатии на него)

Ответы [ 3 ]

3 голосов
/ 14 января 2011

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

Вы можете написать свой собственный TypeConverter, который не наследуется от ExpandableObjectConverter, и установить его в качестве атрибута в своем свойстве, чтобы удалить +.

0 голосов
/ 13 января 2011

Вам необходимо внедрить и применить UITypeEdtitor.См. Как: реализовать редактор типов пользовательского интерфейса

Переопределить GetEditStyle вашего UITypeEditor для возврата Модальный

0 голосов
/ 13 января 2011

По умолчанию для коллекции используется метод [...].Может быть, вы могли бы использовать коллекцию (например, список) вместо массива.

Кстати, по какой конкретной причине вы используете массивы?

...