PropertyGrid替代品

JBe*_*rer 7 .net c# propertygrid winforms

我喜欢PropertyGrid,至少它背后的概念 - 使用反射和属性来编辑你的对象,而无需编写很多UI代码.

我的兴奋很快消失了,默认的PropertyGrid运输与WinForms完全糟糕.嗯,这对于编辑简单的对象等很好,但就目前而言.

  • 它不会为具有"Object"类型的动态属性显示适当的UITypeEditors.
  • 只要您的对象包含集合,您就可以使用所谓的CollectionEditor编辑它们.但是,它不会触发PropertyValueChanged事件.所以一旦你需要添加撤消功能,你就搞砸了.
  • 我仍然没有找到一种优雅的方法来为CollectionEditor添加验证.
  • 如果选择了多个对象,则实现撤销也存在问题,因为在这种情况下,PropertyValueChanged事件args ChangedItem为null.

我很快发现自己正在编写黑客来解决这些问题而不是令人满意的结果.

你会怎么做?至少前三个问题是否有优雅的解决方案?有替代的属性网格吗?最好是免费还是没有PInvokes?

Bra*_*ith 5

很多PropertyGrid优雅来自它的简约.最重要的是,它的设计与Visual Studio相得益彰,我希望它主要用于自定义UITypeEditor和扩展,而不是应用程序代码.

大概你附加的对象是PropertyGrid你自己设计的类?我发现,为了充分利用属性网格,你必须用属性来大量装饰你的类和成员.

您可以在编写自己的子类CollectionEditor(和其他类型的编辑器)并使用该[Editor]属性将它们附加到类成员时感到高兴- 如果您可以将此属性附加到动态属性,则可以强制使用特定编辑器.

我能想到添加验证的唯一方法CollectionEditor是覆盖CreateCollectionForm()方法,返回自己的自定义子类的实例CollectionEditor.CollectionForm.你有可能从这里开始改变事件.

不幸的是,我能做的只是点头并同意关于实现撤销的断言.您可能不得不通过克隆或序列化来"备份"受影响的对象以实现撤消.

我已经看到了内置属性网格控件的替代品,但它们的存在主要是为了提供不同的视觉样式.