我只需要一点帮助来阐明 Messenger 类如何与 MVVM-Light 中的 ICleanup 一起工作。我正在使用 Mvvm-Light v4 在 VB.Net 中创建 WPF 4 应用程序。
我有一个信使,它注册从我创建的 NavigationService 类发送的消息,如下所示:
这是在名为 ClientListViewModel 的 ViewModel 中的注册
''register for messages
Messenger.[Default].Register(Of INavigationService)(Me, "NavigationStart", False, AddressOf HandleParentChildNavigate)
这接收 NavigationService 类并根据与此问题无关的其他逻辑对其执行检查。
在我的 NavigationService 类中触发导航事件时发送消息,如下所示
''Send message that navigation has been requested
Messenger.Default.Send(Of INavigationService)(Me, "NavigationStart")
如果我的接收类(在本例中为 ClientListViewModel)有数据验证错误,这允许我取消导航事件,并将焦点返回到有错误的记录。这一切都很好。
我的问题是,我在哪里以及如何取消注册该消息。我知道我需要这样做以避免在我阅读其他帖子时出现内存泄漏。我看到了类似以下的内容:
Public Overrides Sub CleanUp()
Messenger.Default.Unregister(Me)
End Sub
此清理位于接收消息的同一视图模型 (CientListViewModel) 中。
所以我有三个问题:
我什么时候应该调用这个清理方法
ViewModelLocator 有没有办法在应用程序关闭时取消注册所有消息收件人?
这个问题不太相关,但我也希望得到一些帮助,我如何判断我是否由于未注册的消息收件人而出现“内存泄漏”?
谢谢你的时间