获取PropertyGrid CollectionEditor以使用通用排序列表

时间:2013-03-08 18:58:13

标签: c# winforms propertygrid sortedlist collectioneditor

我有一个C#Library项目,仅用于数据结构;有些类使用SortedList,如下所示:

SortedList<CustomItem1, CustomItem2> MySortedList;

然后,我使用单独的Windows窗体项目,使用PropertyGrid编辑数据结构。除了CollectionEditor之外,一切都很适合编辑;添加/删除按钮被禁用。我知道我需要实现ICollection或IList的非泛型版本(我发现了混合答案) - 但这样做会破坏我的大部分代码,这些代码依赖于{的独特方法。 {1}}输入。

另外,我希望我的数据结构尽可能小,并且如果可能的话,不希望库依赖于WinForms中的任何内容。

有关如何激活CollectionEList的CollectionEList中的添加/删除按钮的任何想法,参考相关问题或帮助文章,示例等,将不胜感激。

1 个答案:

答案 0 :(得分:0)

CollectionEditor Class州的MSDN文档:

  

此编辑器可以编辑具有Item属性的集合。该   编辑器可以从项目确定集合的类型   财产,如果存在的话。如果集合没有此属性,   或者如果您想提供多种类型的集合,即可   覆盖此类的某些受保护成员以自定义   编辑器支持其他类型的集合

此外,Collection Editor Example文件声明:

  

如果您为集合使用强类型IList实现   属性,集合中的所有对象属于同一类型,   您不需要自定义集合编辑器。在这种情况下,你可以依靠   在内置的CollectionEditor上作为属性编辑器,因为   CollectionEditor从Items的类型推断出对象类型   IList实现的属性。你应该使用打字   尽可能收集。 但是,如果您使用诸如此类的集合   ArrayList作为控件的集合属性的类型,需要一个   自定义集合编辑器,用于指定集合项的对象类型

所以我认为CollectionEditor不会与你的OrderedList一起工作(开箱即用)。

您是否尝试将OrderedList集合投影到IList集合中?

IList<CustomItem2> myList = mySortedList.Select(m => m.Value>).ToList();
// Or
IList<KeyValuePair<CustomItem1, CustomItem2>> myList = mySortedList.Select(m => m).ToList();