我目前正在为一个集合实现INotifyCollectionChanged接口,该集合通常具有非常关键且短命的项目。所有这些项都实现了IDispose,可以在从集合中删除之前立即调用 。我对破坏命令没有任何控制权,我只需要接受它。
我现在遇到麻烦,如何传播“删除”动作。 NotifyCollectionChangedAction构造函数确实提供了仅具有指定操作的变体,但我确实拥有已删除项的索引。可悲的是,只有一个索引没有超载。
所以我想我可以:
您更喜欢哪一个?我有点害怕实现这样一个“核心”接口错误,并可能导致没有明显相关的错误...
我找不到任何指导“更改”列表中的项目会发生什么情况,是否有可用的?
旁注:如果这很重要,该集合将不会立即与WPF绑定。
答案 0 :(得分:1)
从我在MSDN中看到的情况来看,删除的唯一合适数据集是overload taking the instance和overload taking instance and index。您可以尝试后者只传递索引; 可能工作......但鉴于第一次超载的存在,我没有希望。如果您不为其提供对象,则下游代码可能无法知道哪个项目已更改。所以我认为你将不得不传递这个对象。这通常不会引起问题,因为大多数代码只是用它来进行参考检查;该对象仍然那里(它还没有被收集) - 它刚被处理掉,其中使用了“just”...主观上(因为可能仍然会导致问题)。
当然,另一个选择是将对象包裹在外观中。那么实际对象是否被处置,设置为空和/或垃圾收集并不重要;外观仍然存在(但应编码以处理不可用的对象)。
作为最终选择;你必须使用他们的收藏品吗?你能不能包装那个集合,以便你选择何时告诉它这些事情?那么你可以完全控制生命周期......
答案 1 :(得分:0)
基本上你被塞住了。
在删除之前销毁对象违反了界面的工作方式。点。你无法控制它 - 那么你就无法正确实现NotifyCollectionChangedAction。
您必须传递索引和已删除的对象。