私のMVVMCアプリケーションには、複数のステップを含むプロセスがあります。基本的にはウィザードです。
私のコントローラーは私の外側のビューを解決し(それを呼び出しますWizardView)、それをメイン領域に追加します。
WizardViewウィザードの進行状況を示すブレッドクラムトレイルと、他のビューをロードするサブリージョンが含まれています(これを呼び出しますWizardRegion)。Step1Viewにロードされた最初のビューWizardRegionです。
各ビューには、Unityコンテナーを使用してコンストラクターに注入されたViewModelがあります。
WizardViewModelステップビューモデルによって公開されるいくつかのイベント集約イベントをサブスクライブします。
各ステップが完了すると、ビューモデルWizardViewModelは状態の保存に使用するイベントを公開します。これは、WizardViewModel進行中に各ステップからデータを収集することを意味します。ステップViewModelは、コントローラーを呼び出して次のステップをにロードしWizardRegionます。
最後のステップWizardViewModelで、ウィザードの結果が保存され、MainRegionは他の画面に戻ります。
次にウィザードに入るときに、すべてのビューとViewModelの新しいインスタンスを作成しますが、前のウィザードのイベントサブスクリプションは引き続き存在します。
ビューモデルが非アクティブ化されていることを認識させて、イベントの購読を解除するにはどうすればよいですか?
もう1つのオプションは、イベントハンドラーでイベントのサブスクライブを解除することです。これはおそらく機能しますが、ウィザードに戻ってイベントを再度サブスクライブする必要がある場合は、複雑さが増します。