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
Utilizzare Copilot con Azure Cosmos DB
Gestire liste di tipi semplici con Entity Framework Core
Generare velocemente pagine CRUD in Blazor con QuickGrid
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Creare una libreria CSS universale: Clip-path
Creazione di componenti personalizzati in React.js con Tailwind CSS
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Utilizzare Model as a Service su Microsoft Azure
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Usare una container image come runner di GitHub Actions