【发布时间】:2013-01-17 01:37:30
【问题描述】:
我只需要一点帮助来阐明 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 是否有办法取消注册所有消息接收者?
-
这个问题不太相关,但我也希望能得到一些帮助,如何判断我是否因未注册的邮件收件人而出现“内存泄漏”?
感谢您的宝贵时间
【问题讨论】:
标签: wpf vb.net mvvm mvvm-light