PropertyGrid alternatives

I love PropertyGrid, well, at least the concept behind it - use reflection and attributes to edit your objects without writing much UI code.

My excitement died out pretty quickly though, the default PropertyGrid shipping with WinForms flat-out sucks. Well, it's fine for editing simple objects and such, but that's as far as it goes.

  • It doesn't display appropriate UITypeEditors for dynamic properties which have type "Object".
  • As soon as your objects contain collections, you might be able to edit them with so called CollectionEditor. However, it won't fire PropertyValueChanged event. So once you need to add undo functionality, you're screwed.
  • And I still haven't found an elegant way to add validation for CollectionEditor.
  • It's also problematic to implement undo if you have multiple objects selected, because in that case PropertyValueChanged event args ChangedItem is null.

I soon found myself writing hacks to address those issues with less than agreeable results.

What would you do? Is there an elegant solution to at least the first three issues? Is there an alternative propertygrid? Preferably free & without PInvokes?

7
задан JBeurer 24 August 2010 в 21:23
поделиться

1 ответ

Изящество PropertyGrid во многом обусловлено его простотой. Прежде всего, он предназначен для работы с Visual Studio, и я ожидаю, что он будет использоваться в основном в пользовательских UITypeEditor и расширениях, а не в коде приложения.

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

Вы можете получить удовольствие от написания собственных подклассов CollectionEditor (и других типов редакторов) и прикрепления их к членам класса с помощью атрибута [Editor] — если сможете. прикрепив этот атрибут к вашим динамическим свойствам, вы можете принудительно использовать определенный редактор.

Единственный способ добавить проверку в CollectionEditor — это переопределить метод CreateCollectionForm(), возвращающий экземпляр вашего собственного подкласса CollectionEditor. Форма собрания. Есть шанс, что вы сможете запускать события изменения отсюда.

К сожалению, все, что я могу сделать, это кивнуть и согласиться с утверждением о реализации отмены. Возможно, вам придется прибегнуть к «резервному копированию» затронутых объектов с помощью клонирования или сериализации, чтобы реализовать отмену.

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

5
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: