Come ripristinare il PivotItem corretto dopo il tombstoning
Faccio il mea-culpa e correggo il tiro, in riferimento al mio post di ieri pomeriggio.
Il modo corretto di ripristinare il PivotItem dopo un tombstoning è quello di farlo nell’evento Loaded della Page.
Quindi:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { appStatus.State["PageIndex"] = this.Pivot.SelectedIndex; base.OnNavigatedFrom(e); }
Qui salviamo nello stato dell’applicazione il SelectedIndex del Pivot. Quando si ritorna all’applicazione succede quanto segue:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (appStatus.State.ContainsKey("PageIndex")) pageIndex = (int)appStatus.State["PageIndex"]; base.OnNavigatedTo(e); }
Qui carichiamo la situazione salvata precedentemente. Notare che pageIndex è definita a livello di classe, ed in questa fase semplicemente ne carichiamo il valore. Dentro l’evento Loaded della Page andiamo a settare il PivotItem:
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { if (pageIndex >= 0) this.Pivot.SelectedIndex = pageIndex; }
Nell’evento Loaded siamo sicuri che la pagina sia stata interamente caricata, perciò non avremo problemi di alcun tipo.
Resta da capire perchè il codice descritto ieri si schianti solo con certi valori di SelectedIndex, e soprattutto perchè a run-time (in esecuzione senza breakpoint, tanto per capirci) vedo il controllo Pivot prendere il focus e poi…Boom! Mah!
Grazie al buon Gabriele che, nonostante non si stia occupando di sviluppo WP7, non ha perso il post dell’amico Matteo che spiegava questa cosa.