ウィンドウがインスタンス化され、メソッドの範囲内で開かれる 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
現在 - AddHandler 宣言が宣言されて subOpenWindow メソッド内で使用され、明確な手段がないことを考えると、後続の RemoveHandler なしで AddHandler を使用すると (通常は大したことではありません)、メモリの問題が発生するかどうかについて議論しています。 RemoveHandler 呼び出しの実行。ビューモデル宣言をよりグローバルなレベルに移動することもできますが、これはきれいに見えません。
問題は、このシナリオで RemoveHandler が必要かどうかです。または、ウィンドウが閉じられると、ガベージ コレクションは適切にクリーンアップされますか?