NotifyCollectionChangedAction:删除时的对象实例?

时间:2010-09-18 07:56:31

标签: c# collections inotifycollectionchanged

我目前正在为一个集合实现INotifyCollectionChanged接口,该集合通常具有非常关键且短命的项目。所有这些项都实现了IDispose,可以在从集合中删除之前立即调用 。我对破坏命令没有任何控制权,我只需要接受它。

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

所以我想我可以:

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

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

我找不到任何指导“更改”列表中的项目会发生什么情况,是否有可用的?

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

2 个答案:

答案 0 :(得分:1)

从我在MSDN中看到的情况来看,删除的唯一合适数据集是overload taking the instanceoverload taking instance and index。您可以尝试后者只传递索引; 可能工作......但鉴于第一次超载的存在,我没有希望。如果您为其提供对象,则下游代码可能无法知道哪个项目已更改。所以我认为你将不得不传递这个对象。这通常不会引起问题,因为大多数代码只是用它来进行参考检查;该对象仍然那里(它还没有被收集) - 它刚被处理掉,其中使用了“just”...主观上(因为可能仍然会导致问题)。

当然,另一个选择是将对象包裹在外观中。那么实际对象是否被处置,设置为空和/或垃圾收集并不重要;外观仍然存在(但应编码以处理不可用的对象)。

作为最终选择;你必须使用他们的收藏品吗?你能不能包装那个集合,以便选择何时告诉它这些事情?那么你可以完全控制生命周期......

答案 1 :(得分:0)

基本上你被塞住了。

  • 在删除之前销毁对象违反了界面的工作方式。点。你无法控制它 - 那么你就无法正确实现NotifyCollectionChangedAction。

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