loading experience

.NET MAUI

Navigazione in .NET MAUI con Shell e parametri

Rotte, schede, menu laterale e passaggio di dati tra pagine in modo tipizzato.

Navigazione in .NET MAUI con Shell e parametri

Shell fornisce la struttura di navigazione di un'app MAUI: schede, menu laterale e navigazione basata su rotte, simile agli indirizzi web.

Gli oggetti passano tra le pagine senza essere trasformati in stringhe.
Gli oggetti passano tra le pagine senza essere trasformati in stringhe.

La struttura dell'app

<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:views="clr-namespace:MiaApp.Views"
       x:Class="MiaApp.AppShell">
    <TabBar>
        <ShellContent Title="Ordini" Icon="ordini.png" ContentTemplate="{DataTemplate views:OrdiniPage}" Route="ordini" />
        <ShellContent Title="Profilo" Icon="profilo.png" ContentTemplate="{DataTemplate views:ProfiloPage}" Route="profilo" />
    </TabBar>
</Shell>

Rotte per le pagine di dettaglio

public AppShell()
{
    InitializeComponent();
    Routing.RegisterRoute("ordini/dettaglio", typeof(DettaglioOrdinePage));
}

// da un ViewModel
await Shell.Current.GoToAsync("ordini/dettaglio", new ShellNavigationQueryParameters
{
    ["Ordine"] = ordineSelezionato
});

Ricevere i parametri

Il ViewModel della pagina di destinazione implementa IQueryAttributable e riceve gli oggetti passati, senza doverli serializzare in una stringa:

public partial class DettaglioOrdineViewModel : ObservableObject, IQueryAttributable
{
    [ObservableProperty]
    public partial Ordine? Ordine { get; set; }

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        if (query.TryGetValue("Ordine", out var o)) Ordine = o as Ordine;
    }
}

Tornare indietro

GoToAsync("..") torna alla pagina precedente e può passare anche lui parametri, utile per restituire una scelta fatta in una pagina di selezione.

Un consiglio: centralizza i nomi delle rotte in costanti. Una rotta scritta male si scopre solo quando l'utente tocca il pulsante.

Commenti (0)

Nessun commento ancora.

Lascia un commento