Nelle versioni precedenti a Windows Phone 8.1, gli sviluppatori usano la classe NavigationService ed il metodo statico Navigate per navigare ad un'altra pagina.
NavigationService.Navigate("/DetailPage.xaml")
Questo metodo ha sempre funzionato bene, ma ha due problemi principali:
- Per navigare alla nuova pagina bisogna mettere il nome della pagina come stringa (non sfruttando quindi l'Intellisense ed il compilatore che ci controlla la correttezza della stringa).
- Il passaggio dei parametri può funzionare solo in query string, quindi ad esempio non potrei passare oggetti come quelli appartenenti ad una classe Person. Il secondo problema è aggirabile sfruttando altre classi o direttamente l'IsolatedStorage, però non è il modo migliore e comunque il primo problema non è risolvibile.
Windows Phone 8.1 cambia la navigazione delle Universal Apps, mentre la parte Silverlight continua ad utilizzare il NavigationService.
La nuova navigazione riprende per intero la struttura presente su Windows 8 ed è quindi basata sul concetto di Frame:
Frame.Navigate(typeof (DetailPage));
Il metodo statico Navigate della classe Frame ha due costruttori. il primo è quello che accetta la navigazione semplice (ovvero senza parametro), ma ha bisogno di sapere il tipo della pagina verso la quale vogliamo navigare. Come si può notare, abbiamo il pieno supporto ad Intellisense e il compilatore ci avvisa subito se abbiamo sbagliato il nome della pagina o se questa non esiste. Tutto questo prima era impossibile.
Supponiamo ora di avere la nostra solita classe Person:
public class Person { public string Name { get; set; } public string Surname { get; set; } public int Age { get; set; } }
E di voler passare questo oggetto durante la navigazione:
Frame.Navigate(typeof (DetailPage), person);
Il metodo Navigate della classe Frame ha un secondo costruttore che accetta, come secondo parametro, un oggetto da passare alla pagina di destinazione.
Dopo aver fatto la navigazione non ci rimane altro da fare che intercettare, nella pagina di destinazione, il parametro che abbiamo mandato. Non usiamo più il classico metodo OnNavigatedTo, perché è cambiata la navigazione, e quindi sfruttiamo il metodo NavigationHelper_LoadState.
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) { var parameter = e.NavigationParameter; if (parameter == null) { //ho effettuato la navigazione senza parametro } else { //ho fatto la navigazione con parametro e so che il parametro è di tipo Person var person = (Person) parameter; } }
Siamo stati ovviamente attenti nel controllare che effettivamente ci sia un parametro passato, altrimenti la conversione fallirebbe.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Miglioramenti agli screen reader e al contrasto in Angular
Creare un'applicazione React e configurare Tailwind CSS
Eliminare una project wiki di Azure DevOps
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Creare alias per tipi generici e tuple in C#
Utilizzare un service principal per accedere a Azure Container Registry
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Ordinare randomicamente una lista in C#
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Effettuare il refresh dei dati di una QuickGrid di Blazor
Generare token per autenicarsi sulle API di GitHub
Referenziare un @layer più alto in CSS
I più letti di oggi
- La navigazione tra le pagine in Windows Phone 8.1
- Salvare in maniera sicura dati sensibili nelle Universal App con il Credential Locker
- Canary deployment con le pipeline YAML di Azure DevOps
- Registrare un applicazione per gestire l'auto upload in Windows Phone 8
- Tool per amministrare blob, queue e table di Windows Azure
- Creare un feed NuGet privato
- Avviare la mappa in modalità navigazione in Windows Phone 8
- Utilizzare Bootstrap per mostrare dei popup accanto a un controllo
- Building modern web apps with Blazor
- Adattare l'UI a risoluzioni differenti in Windows Phone 8.1