2

我目前正在为一个集合实现 INotifyCollectionChanged 接口,该集合通常具有非常关键和短暂的项目。所有这些项目都实现了 IDispose,可以在从集合中删除之前立即调用它。我对销毁命令没有任何控制权,我只能顺其自然。

我现在的麻烦是,如何传播“删除”操作。NotifyCollectionChangedAction 构造函数确实提供了一个仅指定操作的变体,但我确实有已删除项目的索引。可悲的是,没有仅采用索引的重载。

所以我想我可以:

  • 仅通过“删除”操作
  • 将删除操作与“空”对象和索引一起传递
  • 将删除操作与已处置的对象和索引一起传递

你更喜欢其中的哪一个?我有点害怕错误地实现这样一个“核心”接口,并可能导致不明显相关的错误......

我找不到任何指南,“更改”列表中的项目会发生什么,有可用的吗?

旁注:如果这很重要,该集合不会立即绑定到 WPF。

4

2 回答 2

1

从我在 MSDN 中可以看到,仅适用于remove的数据集是采用 instance的重载,以及采用 instance 和 index的重载。您可以尝试后者仅传递索引;它可能会起作用......但鉴于第一次过载的存在,我不抱希望。如果你给它对象,下游代码可能无法知道哪个项目发生了变化。所以我认为你将不得不传递对象。这通常不会引起问题,因为大多数代码只是将其用于参考检查;物体还在(它还没有被收集) - 它刚刚被处理,“只是”被使用......主观上(因为这仍然可能导致问题)。

当然,另一种选择是将对象包装在外观中。然后,如果实际对象被处置、设置为 null 和/或垃圾收集,则无关紧要;外观仍然存在(但应该对其进行编码以处理不可用的对象)。

作为最后的选择;你必须使用他们的收藏吗?你能不能只包装那个系列,以便选择什么时候告诉它这些事情?然后你保留对生命周期的完全控制......

于 2010-09-18T08:03:32.580 回答
0

基本上你很无聊。

  • 在移除之前销毁对象违反了接口的工作方式。观点。您无法控制它 - 那么您无法正确实施 NotifyCollectionChangedAction。

  • 您必须传递索引和已删除的对象。

于 2010-09-18T08:01:39.710 回答