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
Creare form tipizzati con Angular
Eseguire attività con Azure Container Jobs
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Utilizzare i primary constructor di C# per inizializzare le proprietà
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Routing statico e PreRendering in una Blazor Web App
Generare file PDF da Blazor WebAssembly con iText
Reactive form tipizzati con modellazione del FormBuilder in Angular
I più letti di oggi
- Impostare un elemento come ridimensionabile tramite CSS
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- Personalizzare l'errore del rate limiting middleware in ASP.NET Core
- Accedere alla console di una Azure Container App
- Modificare i metadati nell'head dell'HTML di una Blazor Web App
- Gli oggetti CallOut di Expression Blend 4.0
- SQL Server 2005 December CTP
- Sfruttare le nuove tipologie di input di HTML5 con ASP.NET 4.0
- Upload da una pagina web con Dundas Upload