取消订阅事件处理程序的策略

时间:2010-03-23 14:17:44

标签: .net wpf event-handling

在我的WPF应用程序中,我有一个给出ViewModel的View,当给出这个View时,它会向ViewModel的PropertyChanged事件添加事件处理程序。当GUI中发生某些操作时,我删除了视图并将另一个视图添加到保留容器中 - 这个新视图绑定到同一个ViewModel。

发生这种情况后,旧的View仍然在ViewModel中处理PropertyChanged事件。我假设发生了这种情况,因为垃圾收集器尚未收集View,因此还活着?好吧 - 我需要它停下来。我的假设是我需要从ViewModel手动分离事件处理程序?有关于如何处理这个问题的最佳做法吗?

2 个答案:

答案 0 :(得分:2)

我正在使用的策略是使View实现IDisposable,并让View的Dispose函数取消订阅事件处理程序。然后,无论谁负责添加视图,都需要先在旧视图上调用Dispose()

像魅力一样工作,但这是IDisposable的有效用途吗?

答案 1 :(得分:2)

也许订阅视图的Unloaded事件并在Unloaded事件处理程序中分离有一点清洁,它也不需要用户调用Dispose()。