我有一个C#Library项目,仅用于数据结构;有些类使用SortedList
,如下所示:
SortedList<CustomItem1, CustomItem2> MySortedList;
然后,我使用单独的Windows窗体项目,使用PropertyGrid
编辑数据结构。除了CollectionEditor
之外,一切都很适合编辑;添加/删除按钮被禁用。我知道我需要实现ICollection或IList的非泛型版本(我发现了混合答案) - 但这样做会破坏我的大部分代码,这些代码依赖于{的独特方法。 {1}}输入。
另外,我希望我的数据结构尽可能小,并且如果可能的话,不希望库依赖于WinForms中的任何内容。
有关如何激活CollectionEList的CollectionEList中的添加/删除按钮的任何想法,参考相关问题或帮助文章,示例等,将不胜感激。
答案 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();