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
Eseguire una GroupBy per entity in Entity Framework
Disabilitare automaticamente un workflow di GitHub
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Effettuare il binding di date in Blazor
Utilizzare politiche di resiliency con Azure Container App
Copiare automaticamente le secret tra più repository di GitHub
Creazione di componenti personalizzati in React.js con Tailwind CSS
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Generare file per il download da Blazor WebAssembly
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Configurare policy CORS in Azure Container Apps
Eseguire query manipolando liste di tipi semplici con Entity Framework Core