2010-03-23 70 views
0

在我的WPF应用程序中,我有一个给定ViewModel的View,并且在给定此View时,它将事件处理程序添加到ViewModel的PropertyChanged事件。当在GUI中发生某些操作时,我将删除视图并将另一个视图添加到容器中 - 这个新视图绑定到相同的ViewModel。取消订阅事件处理程序的策略

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

回答

2

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

+0

谢谢!我喜欢这个解决方案比Dispose解决方案好得多。 – stiank81 2010-03-23 18:04:32

+0

来自MSDN:“由于用户启动的系统主题更改,可能会在控件上引发”Loaded and Unloaded“。另外,如果您决定分离元素并重新粘贴,该怎么办?你会记得重新配置事件吗? – Zmaster 2011-10-25 11:31:36

2

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

工程就像一个魅力,但这是IDisposable的有效使用?

相关问题