WinRT introduce un nuovo meccanismo di navigazione, simile a quello di Windows Phone, per navigare tra le varie pagine dell'applicazione: in pratica, ogni applicazione è dotata, un po' come un browser, di uno stack di navigazione, da cui è possibile andare avanti, navigando verso specifiche risorse, oltre che ritornare indietro.
In WinRT, la navigazione agisce indicando il tipo relativo alla View, quindi il tipico codice necessario a navigare da una pagina fa uso del Frame (il contenitore della view) e del suo metodo Navigate, come in questo esempio:
this.Frame.Navigate(typeof(GroupDetailPage), ((NewsGroup)group).UniqueId);
Il primo parametro indica il tipo relativo alla view, mentre il secondo il parametro da passare. Successivamente, sarà possibile accedere al parametro all'interno della pagina, con un codice molto simile a questo, preso dal template di default di Visual Studio, che astrae un po' delle complessità nascosta:
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) { int id = Convert.ToInt32(navigationParameter); }
In realtà, se si opta per non usare il template predefinito, è sufficiente sovrascrivere il metodo OnNavigatedTo, per accedere ai parametri di navigazione grazie al tipo NavigationEventArgs, passato come parametro.
In generale, il meccanismo di navigazione è molto semplice e intutivo, ad esempio il metodo GoBack ci consente di tornare indietro nello stack.
In alcuni scenari, però, questo meccanismo può sembrare poco flessibile. Supponiamo di avere un servizio di configurazione delle sezioni che è stato pensato per indicare l'URL delle pagine, anziché il tipo: in questo caso occorre apportare delle modifiche per tenere conto di questo aspetto. Si tratta di andare a recuperare il tipo in maniera corretta, grazie all'uso delle classi offerte dal .NET Framework, che consentono di ricostruire la definizione del tipo in maniera dinamica:
string ns = App.Current.GetType().Namespace; string className = "GroupDetailPage"; // supponiamo arrivi da un servizio di configurazione string id = "15"; // arriva da un servizio esterno this.Frame.Navigate(Type.GetType(ns + "." + className), id);
Grazie a questo codice diventerà molto semplice adattare la navigazione esisente, perché funzioni anche in presenza di percorsi che arrivano da remoto, adattandoci alle necessità di WinRT.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Gestire il colore CSS con HWB
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Miglioramenti nelle performance di Angular 16
Referenziare un @layer più alto in CSS
Generare una User Delegation SAS in .NET per Azure Blob Storage
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Creare una libreria CSS universale: Nav menu
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Utilizzare i primary constructor di C# per inizializzare le proprietà
Miglioramenti nell'accessibilità con Angular CDK
Creare una libreria CSS universale - Rotazione degli elementi