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