【问题标题】:PropertyGrid - Ilist Collection Remove not firing as expectedPropertyGrid - Ilist Collection Remove 未按预期触发
【发布时间】:2023-03-08 02:26:01
【问题描述】:

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

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

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

我也有一个自己实现的 CollectionEditor,但仍然看不到挂钩到我的对象的方法。

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

【问题讨论】:

    标签: c# collections propertygrid ilist collectioneditor


    【解决方案1】:

    集合编辑器不使用 RemoveRemoveAt。相反,当用户按下 OK 按钮时,它会调用 IList.Clear 方法,然后调用 IList.Add 来添加集合将包含的所有项目。并不是说它适用于 IList 的非泛型版本。

    【讨论】:

      【解决方案2】:

      好吧,老鼠!

      在我的 CollectionEditor 中是否有任何方法可以获取实际的收藏? 我想我会得到集合,然后在按下 OK 后进行比较,然后从那里删除记录。

      如果不行,把矩阵屏保掸掉,挖出一本好书告诉大家它正在编译。

      【讨论】:

      • 你有两个我能想到的选择。第一个选项是按照你说的做,将新集合与旧集合(可能在 CollectionEditor.SetItems 中)进行比较,然后在那里做你想做的任何事情。此选项更易于实施,但运行成本可能很高。
      • 第二个选项是不仅要实现您自己的 CollectionEditor,还要实现 CollectionEditorForm。让表单跟踪用户添加和删除的内容(作为命令列表),当用户按下 OK 时,处理该命令列表。
      猜你喜欢
      • 2019-05-16
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多