Devo essere in grado di intercettare il framework ed eseguire la re-inizializzazione quando un ViewModel viene ricaricato dalla cache. Poiché il ViewModel non viene ricreato, non posso né utilizzare i metodi Init(), MvxViewModel.InitFromBundle, né MvxViewModel.ReloadFromBundle.MvvmCross ViewModel caching e reinizializzazione
Sto tentando di eseguire il debug di una situazione in cui facendo clic sul pulsante Indietro viene ripristinato un ViewModel con stato incoerente. Una sorta di MvxViewModel.OnReloading() sarebbe d'aiuto.
C'è un modo per farlo in v3?
EDIT:
Si supponga che ho FirstPageViewModel che espone un comando per navigare SecondPageViewModel. In base a ciò che sto osservando, se si fa clic sul pulsante Indietro del simulatore mentre su SecondPageView, FirstPageViewModel non viene creato. Invece, viene recuperato, credo, da qualche cache, quindi legato alla vista. Questa cache è probabilmente un'implementazione della cache IMvxSingleViewModel.
Quindi, il flusso regolare dopo la costruzione di ViewModel, dove si chiama Init(), InitFromBundle() e ReloadFromBundle() non si applica in questo scenario. In altre parole, ho bisogno di un modo per reinizializzare un ViewModel a prescindere dal fatto che sia appena stato appena creato o resuscitato da una cache. Se il primo, posso usare un metodo Init(). Se quest'ultimo è vero, non c'è modo di farlo all'interno del ViewModel stesso.
Questo è il problema:
Ho un'istanza di ICollectionService che è passato da FirstViewModel a SecondViewModel. FirstView contiene anche un controllo ListView associato a questo CollectionService. Poiché CollectionService non è fortemente digitato, posso passarlo e utilizzare il modello di oggetto appropriato per renderizzare i suoi elementi nella vista.
Prima di mostrare SecondViewModel, FirstViewModel recupera alcuni dati remoti e popola CollectionService. Quando viene visualizzato SecondViewModel, la sua vista visualizza i dati da CollectionService utilizzando un modello di elemento diverso. Tuttavia, se si torna indietro, dal momento che FirstViewModel fa ancora riferimento a CollectionService, FirstView eseguirà il rendering dei dati utilizzati da SecondViewModel a meno che FirstViewModel possa essere reinizializzato, cancellando il CollectionService nel processo. Forse l'approccio è sbagliato ma questo è il punto cruciale del mio problema.
Non so se la piattaforma fa la differenza, come mi aspetterei lo stesso comportamento su Windows Phone e iOS poiché questa re-inizializzazione avverrà nel modulo Core. Ciò nonostante sono osservazioni su Android.
TIA.
Non mi è affatto chiaro cosa stai chiedendo, che cos'è "la cache", che cosa è incoerente nel tuo stato, su quale piattaforma o quali piattaforme stai facendo o cosa stai cercando di fare. Un esempio di flusso utente e/o qualche esempio di codice problema potrebbe aiutare. – Stuart
Stuart, grazie per la risposta. Ho appena modificato la mia domanda con informazioni aggiuntive. –