0

我有一个仅用于数据结构的 C# 库项目;一些类使用SortedList这样的:

SortedList<CustomItem1, CustomItem2> MySortedList;

然后我有一个单独的 Windows 窗体项目,使用它PropertyGrid来编辑数据结构。CollectionEditor除了;之外,一切都非常适合编辑。添加/删除按钮被禁用。我知道我需要实现 ICollection 或 IList 的非通用版本(我在这方面找到了不同的答案) - 但这样做会破坏我的大部分代码,这些代码依赖于该 SortedList类型独有的一些方法.

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

任何关于如何在 CollectionEditor 中为 SortedList 激活添加/删除按钮的想法、对相关问题或帮助文章、示例等的引用将不胜感激。

4

1 回答 1

0

CollectionEditor 类的 MSDN 文档指出:

此编辑器可以编辑具有 Item 属性的集合。编辑器可以根据Item属性确定集合的类型( 如果存在)。如果集合没有这个属性,或者如果你想提供多个类型的集合,你可以重写这个类的某些受保护的成员来自定义编辑器以支持其他类型的集合

此外,集合编辑器示例文档指出:

如果对集合属性使用强类型 IList 实现,并且集合中的所有对象都属于同一类型,则不需要自定义集合编辑器。在这种情况下,您可以依赖内置的 CollectionEditor 作为属性编辑器,因为 CollectionEditor 从 IList 实现的 Items 属性的类型推断对象类型。您应该尽可能使用类型化集合。但是,如果使用 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();
于 2013-03-11T17:47:00.360 回答