我目前正在为一个集合实现 INotifyCollectionChanged 接口(interface),该集合通常具有非常关键和短暂的项目。所有这些项目都实现了 IDispose,可以在从集合中移除之前立即调用它。我无法控制销毁命令,我只能顺其自然。
我现在的麻烦是,如何传播“删除”操作。 NotifyCollectionChangedAction 构造函数确实提供了仅包含指定操作的变体,但我确实有已删除项目的索引。遗憾的是,没有仅采用索引的重载。
所以我想我可以:
- 只传递“移除” Action
- 传递删除操作以及“空”对象和索引
- 将删除操作与已处置的对象和索引一起传递
你更喜欢哪一个?我有点害怕错误地实现这样一个“核心”接口(interface)并可能导致不明显相关的错误......
我找不到任何关于“更改”列表中的项目会发生什么的指南,是否有可用的指南?
旁注:如果这很重要,该集合将不会立即绑定(bind)到 WPF。
最佳答案
据我在 MSDN 中看到的,删除 唯一合适的数据集是 overload taking the instance , 和 overload taking instance and index .您可以尝试后者只传递索引;它可能 工作...但考虑到第一个过载的存在,我不抱希望。如果您不给它对象,下游代码可能无法知道更改了哪个项目。所以我认为你将不得不传递对象。这通常不会引起问题,因为大多数代码只是将它用于引用检查;对象仍然在那里(它还没有被收集)——它刚刚被处理掉,这里使用了“just”……主观上(因为这可能仍然导致问题)。
当然,另一种选择是将对象包装在外观中。那么实际对象是否被释放、设置为 null 和/或被垃圾收集都无关紧要;外观仍然存在(但应该对其进行编码以处理不可用的对象)。
作为最终选择;你必须使用他们的收藏吗?您能否包装该集合,以便您选择何时告诉它这些事情?那么您将保留对生命周期的完全控制...
关于c# - NotifyCollectionChangedAction : object instance on removal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740817/