我正在开发一个使用属性网格编辑名称/值对的应用程序。我的类文件中的一些属性是 ListDictionary 集合。是否有可以在属性声明中应用的 Editor 属性,使 Collection Editor 在运行时工作?如果没有,是否可以从 ComponentModel.Design.CollectionEditor 继承以在运行时使用?我需要能够添加、删除和编辑集合值。非常感谢,特里
1 回答
来自 codeproject 文章 [ http://www.codeproject.com/KB/cs/dzcollectioneditor.aspx][1]
为了与 CollectionEditor 成功持久化,集合应满足三个要求:
- 首先,集合必须实现 IList 接口(从 System.Collections.CollectionBase 继承在大多数情况下是最佳选择)。
其次,它必须具有 Indexer(VB.NET 中的项)属性。CollectionEditor 使用此属性的类型来确定将添加到集合中的实例的默认类型。
为了更好地理解其工作原理,请查看 CustomCollectionEditorForm 的 GetItemType() 函数:
受保护的虚拟类型 GetItemType(IList coll) { PropertyInfo pi= coll.GetType().GetProperty("Item", new Type[]{typeof(int)}); 返回 pi.PropertyType }
第三,集合类必须实现以下一种或两种方法:Add 和 AddRange。尽管 IList 接口有一个 Add 成员并且 CollectionBase 实现了 IList,但您仍然必须为您的集合实现一个 Add 方法,因为 CollectionBase 声明了 IList 的 Add 成员的显式成员实现。设计器根据您实现的方法对集合进行序列化。如果您同时实现了两者,则首选 AddRange。
在本文中,您将找到在属性网格上实现集合所需的一切