0

在我们的 WPF/MVVM 应用程序中有一些场景,其中一个窗口被实例化并在方法的范围内打开。非常简单的例子:

Private Sub subOpenWindow
    Dim myViewModel = New Viewmodel1 'create viewmodel that Window1 will use as datacontext
    AddHandler myViewModel.SomeEvent, AddressOf subHandleSomeEvent

    Dim myWindow = New Window1(ViewModel1)
    myWindow.Show
End Sub

Private Sub subHandleSomeEvent
 'do some stuff
End Sub

现在 - 我们正在讨论在没有后续 RemoveHandler 的情况下使用 AddHandler(通常是一个很大的禁忌)是否会导致我们的内存问题,因为 AddHandler 声明已被贴花并在 subOpenWindow 方法内部使用并且没有明显的方法执行 RemoveHandler 调用。我们可以将 viewmodel 声明移到更全局的级别,但这似乎并不干净。

问题是:在这种情况下是否需要 RemoveHandler ?或者一旦窗口关闭,垃圾收集会正确清理吗?

4

1 回答 1

0

您可以处理 Window 的 Closed 事件以删除处理程序。事实上,当前类(包含处理程序的类)创建的引用确实将 myViewModel 保存在内存中。另一种方法是研究使用弱事件 - 有关详细信息,请参见此处

于 2010-09-25T12:00:26.663 回答