Caliburn.micro を初めて使用します。いくつかのネットワーク メッセージをリッスンする ViewModel で実行中のプロセスを開始する単純なアプリがあります。ウィンドウが閉じたら、ビューモデルのプロセスがリッスンするのを止めたいと思います。
ビューは UserControl であるため、ViewModel が正しくクリーンアップできるように、ウィンドウが閉じていることをどのように伝えることができますか?
OnDeactivate
ビューモデルが実装されているかどうかをオーバーライドできます(または、ロジックを準備したい場合はIScreen
、同等に継承します)。Screen
このメソッドは、画面が非アクティブ化されたときに呼び出されます。画面が非bool
アクティブ化または閉じているだけの場合にもフラグがあります。
ブートストラッパーで選択した IoC コンテナーからのビュー モデルのみが、その有効期間が正しく接続されます。したがって、そのように VM を取得すると、適切にOnInitialize
,OnActivate
とOnDeactivate
が呼び出されます。ビュー モデルを他の方法 (手動など) でインスタンス化し、たとえば でそれらを使用しているConductor
場合、運が悪いです...
ビューモデルを実装して使用している場合は、定期的なライフタイムサイクルを強制しようとすると思いますが。IWindowManager
IScreen
「信頼してください-私は医者です」と述べたことに加えて、IDeactivate
インターフェイスを確認することをお勧めします。
そのインターフェースを実装し、Deactivate
メソッドを持ち、そこに必要なものすべてを実装できます。