C# PropertyGrid-Ilist集合移除未按预期触发

C# PropertyGrid-Ilist集合移除未按预期触发,c#,collections,propertygrid,ilist,collectioneditor,C#,Collections,Propertygrid,Ilist,Collectioneditor,我有一个实现IList的集合对象。在集合中,我使用了一个列表来收集项目。 在PropertyGrid内部(在运行时),它会正确绑定并打开集合编辑器。我可以编辑,可以正确添加项,并且可以在集合类中使用这些方法时捕获它们 但是,如果您尝试删除任何项目,它们将从集合中删除,但IList.remove或IList.RemoveAt似乎都不会从我的集合中使用。删除的项目也意味着从数据库中删除,这是我在Remove方法中实现的行为 我还删除了remove方法中的所有逻辑,并将它们留给throw new no

我有一个实现IList的集合对象。在集合中,我使用了一个列表来收集项目。 在PropertyGrid内部(在运行时),它会正确绑定并打开集合编辑器。我可以编辑,可以正确添加项,并且可以在集合类中使用这些方法时捕获它们

但是,如果您尝试删除任何项目,它们将从集合中删除,但IList.remove或IList.RemoveAt似乎都不会从我的集合中使用。删除的项目也意味着从数据库中删除,这是我在Remove方法中实现的行为

我还删除了remove方法中的所有逻辑,并将它们留给throw new notimplemented(),这些方法根本不会被触发

我也有一个由自己的CollectionEditor实现的,但仍然看不到一种方法来钩住我的对象


那么,我应该在哪里寻找相关的方法呢?是否还需要更改项目的行为?

集合编辑器不使用删除删除。相反,当用户按下OK按钮时,它调用IList.Clear方法,然后调用IList.Add添加集合将包含的所有项。这并不是说它可以与非通用版本的IList一起工作

在我的收藏编辑中,有没有办法获得实际收藏? 我想我会得到集合,然后在按下OK键后进行比较,然后从中删除记录


如果做不到这一点,请掸掉矩阵屏幕保护程序上的灰尘,找出一本好书,告诉大家它正在编译。

我可以想到两个选项。第一个选项是按照您所说的做,将新集合与旧集合(可能在CollectionEditor.SetItems中)进行比较,然后执行您想在那里执行的任何操作。此选项更容易实现,但运行成本可能更高。第二个选项不仅要实现您自己的CollectionEditor,还要实现CollectionEditor表单。让表单跟踪用户添加和删除的内容(作为命令列表),并在用户按OK时处理该命令列表。