MessengerクラスがMVVM-LightのICleanupでどのように機能するかを明確にするために少し助けが必要です。Mvvm-Lightv4を使用してVB.NetでWPF4アプリケーションを作成しています。
次のように作成した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)にあります。
だから私は3つの質問があります:
このクリーンアップメソッドはいつ呼び出す必要がありますか
ViewModelLocatorを使用して、アプリケーションが閉じられたときにすべてのメッセージ受信者の登録を解除する方法はありますか?
この質問はあまり関連性がありませんが、助けていただければ幸いです。未登録のメッセージ受信者の結果として「メモリリーク」が発生しているかどうかを確認するにはどうすればよいですか。
御時間ありがとうございます