Come memorizzare nella cache una pagina in Windows Phone 8.1

Precedentemente nelle app di Windows Phone 8.0 , potevamo navigare più a fondo nella stessa pagina in questo modo:

 NavigationService.Navigate(new Uri("/SamePage.xaml", UriKind.Relative)); 

La pagina è stata memorizzata automaticamente nella cache, quindi dopo essere tornata indietro, l’utente si trovava nella stessa posizione dell’elenco quando è uscito.

Ma nelle Windows Phone Store Apps navighiamo più in profondità nella stessa pagina in questo modo:

 Frame.Navigate(typeof(SamePage), id); 

Ma dopo essere tornato indietro carica di nuovo i dati, quindi se l’utente era nel mezzo di una lunga lista, ora è in cima:

 private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) { // TODO: Create an appropriate data model for your problem domain to replace the sample data. var group = await SampleDataSource.GetGroupAsync((string)e.NavigationParameter); this.DefaultViewModel["Group"] = group; } 

Come posso memorizzare una pagina in cache come in precedenza, in modo che l’utente si trovi nella stessa posizione in un elenco in cui è uscito?

(Ho incluso anche le app di Windows perché ne sono a conoscenza da tempo più lungo).

Nel tuo costruttore di pagine dovrai specificare

  public MainPage() { this.InitializeComponent(); this.NavigationCacheMode = NavigationCacheMode.Required; } 

In App.cs puoi impostare RootFrame.CacheSize che suggerisce al sistema operativo quante pagine dovrebbe cercare di conservare nella cache. Inoltre, probabilmente non dovresti reimpostare il datacontext in NavigationHelper_LoadState: questo metodo viene chiamato ogni volta che accedi alla pagina, anche se navighi indietro.