How pass parameter when navigate to another page (Shell)

Viewed 131

I've just started trying to use MAUI in Visual studio to develop a multiplatform app. I have managed to use shell navigation and this works well using the flyout.

What I want to do is have a button click which navigates to another page passing a varialbe with it.

What does work (kind of) is this:

await Navigation.PushModalAsync(new ResultListView(ordnum));

This does navigate to the page and passes the var ordnum as I want, however it breaks out of the shell navigation (I loose the flyout etc).

What I can't figure out is how to do it within Shell

await Shell.Current.GoToAsync

seems to be what I want, but when I use routings I can't specify the variable in the same way?

This seems such a basic question I'm sure it's been asked before, but I honestly can't find it. I've spent all morning searching for an answer! The answers I did find about passing variables through XAML were very confusing.

Thanks

Andrew

1 Answers

Lest supose you want to send an object PRODUCT

private Product productToSend;
private Product anotherProductToSend;

await Shell.Current.GoToAsync($"{nameof(YourPageHere)}?",
                new Dictionary<string, object>
                {
                    ["Object1"] = productToSend,
                    ["Object2"] = anotherProductToSend
                });

Then in your pageViewModel:

[QueryProperty("Object1", "Object1")]
[QueryProperty("Object2", "Object2")]
public partial class YourPageHereViewModel : ObservableObject
{
    [ObservableProperty]
    Product Object1;

    [ObservableProperty]
    Product Object2;
}
Related