ViewModel がキャッシュからリロードされているときに、フレームワークをインターセプトして再初期化を実行できるようにする必要があります。ViewModel は再作成されていないため、Init()、MvxViewModel.InitFromBundle、MvxViewModel.ReloadFromBundle のいずれのメソッドも使用できません。
戻るボタンをクリックすると、一貫性のない状態の ViewModel が復元される状況をデバッグしようとしています。ある種の MvxViewModel.OnReloading() が役立ちます。
v3でこれを行う方法はありますか?
編集:
SecondPageViewModel に移動するコマンドを公開する FirstPageViewModel があるとします。私が観察していることに基づいて、SecondPageView でシミュレーターの戻るボタンをクリックすると、FirstPageViewModel は構築されません。代わりに、何らかのキャッシュから取得され、ビューにバインドされていると思います。このキャッシュは、IMvxSingleViewModel キャッシュの実装である可能性があります。
したがって、ViewModel 構築後の通常のフロー (Init()、InitFromBundle()、および ReloadFromBundle() を呼び出す) は、このシナリオには適用されません。つまり、ViewModel が新しく構築されたばかりか、キャッシュから復活したかに関係なく、ViewModel を再初期化する方法が必要です。前者の場合は、Init() メソッドを使用できます。後者の場合、ViewModel 自体でこれを行う方法はありません。
これが問題です:
FirstViewModel から SecondViewModel に渡される ICollectionService のインスタンスがあります。FirstView には、この CollectionService にバインドされた ListView も含まれています。CollectionService は厳密に型指定されていないため、これを渡し、適切な項目テンプレートを使用してその項目をビューに表示できます。
SecondViewModel を表示する前に、FirstViewModel はいくつかのリモート データを取得し、CollectionService に入力します。SecondViewModel が表示されると、そのビューは別のアイテム テンプレートを使用して CollectionService からのデータを表示します。ただし、戻ると、FirstViewModel がまだ CollectionService を参照しているため、FirstViewModel が再初期化されない限り、FirstView は SecondViewModel によって使用されたデータをレンダリングし、その過程で CollectionService をクリアします。アプローチが間違っているかもしれませんが、これが私の問題の核心です。
この再初期化が Core モジュールで発生するため、Windows Phone と iOS で同じ動作が予想されるため、プラットフォームが違いを生むかどうかはわかりません。それにもかかわらず、これらは Android での観察です。
ティア。