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

C# 获取PropertyGrid CollectionEditor以使用通用排序列表,c#,winforms,propertygrid,sortedlist,collectioneditor,C#,Winforms,Propertygrid,Sortedlist,Collectioneditor,我有一个C#Library项目,只用于数据结构;有些类使用的SortedList如下: SortedList MySortedList 然后,我有一个单独的Windows窗体项目,它使用PropertyGrid编辑数据结构。除了集合编辑器,其他一切都非常适合编辑;添加/删除按钮被禁用。我知道我需要实现ICollection或IList的非通用版本(我在这方面发现了不同的答案)——但这样做会破坏我的大部分代码,这些代码依赖于SortedList类型特有的一些方法 另外,我希望我的数据结构尽可能小,

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

SortedList MySortedList

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

另外,我希望我的数据结构尽可能小,如果可能的话,我不希望库依赖于WinForms中的任何东西


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

有关状态的MSDN文档:

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

此外,该文件指出:

如果对集合使用强类型IList实现 属性,并且集合中的所有对象都属于同一类型, 您不需要自定义集合编辑器。在这种情况下,你可以信赖 在内置CollectionEditor上作为属性编辑器,因为 CollectionEditor根据项的类型推断对象类型 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();
IList myList=mySortedList.Select(m=>m.Value>).ToList();
//或
IList myList=mySortedList.Select(m=>m.ToList();

您删除的问题中有什么不够清楚:?问题没有得到正确的答案,或者至少没有以我能理解的形式回答。您给出的答案似乎表明我必须创建自己的自定义集合类,该类不具有我需要的
SortedList
的任何属性。我觉得这可能是因为我没有正确地提问,所以我删除了它,这样我可以重新开始,希望这次能正确地提问;i、 e.我所做的更改不会被保存。。。另外,我无论如何也不会更新密钥,至少我想不到。投影将在列表中创建对现有对象实例的新引用。CollectionEditor对这些对象状态所做的更改将影响SortedList集合引用的相同对象(除非它创建新对象)。或者,您可以创建一个代理对象来封装SortedList集合,实现IList接口,并将IList调用转换为相应的SortedList调用。但是,如果您遇到这么多麻烦,我只会按照API的说明和CollectionEditor类的“覆盖某些受保护的成员”。