Xamarin.forms 如何向Xamarin Forms应用程序中的ShellContent项添加路由查询参数

Xamarin.forms 如何向Xamarin Forms应用程序中的ShellContent项添加路由查询参数,xamarin.forms,Xamarin.forms,我有一个列出购买请求的ContentPage。我正在尝试向AppShell.xaml添加弹出式视觉层次结构。导航需要具有将导航到同一页面的项目,但应传递一个查询参数,然后页面将使用该参数过滤页面上的数据。因此,route属性需要如下所示route=“purchase requests?filter=for me” 我遇到的问题是,当我运行该应用程序时,它会出现“无法找出路径://fusion/IMPL_purchase-requests?filter=for me/purchase-reques

我有一个列出购买请求的ContentPage。我正在尝试向AppShell.xaml添加弹出式视觉层次结构。导航需要具有将导航到同一页面的项目,但应传递一个查询参数,然后页面将使用该参数过滤页面上的数据。因此,route属性需要如下所示
route=“purchase requests?filter=for me”

我遇到的问题是,当我运行该应用程序时,它会出现“无法找出路径://fusion/IMPL_purchase-requests?filter=for me/purchase-requests?filter=for me/”的故障

一个更完整的样本显示我需要什么

<FlyoutItem Title="Fusion" 
            Route="fusion"
            FlyoutDisplayOptions="AsMultipleItems">
    <ShellContent Title="Waiting (for me)"
                  Route="purchase-requests?filter=for-me"
                  ContentTemplate="{DataTemplate local:PurchaseRequestsPage}" />
    <ShellContent Title="Waiting (by me)"
                  Route="purchase-requests?filter=by-me"
                  ContentTemplate="{DataTemplate local:PurchaseRequestsPage}" />
</FlyoutItem>

更新:

登记路线:

 void RegisterRoutes()
    {
        routes.Add("monkeydetails", typeof(MonkeyDetailPage));
        routes.Add("beardetails", typeof(BearDetailPage));
        routes.Add("catdetails", typeof(CatDetailPage));
        routes.Add("dogdetails", typeof(DogDetailPage));
        routes.Add("elephantdetails", typeof(ElephantDetailPage));

        foreach (var item in routes)
        {
            Routing.RegisterRoute(item.Key, item.Value);
        }
    }
然后使用路由参数导航到不同的页面

            ShellNavigationState state = Shell.Current.CurrentState;
        await Shell.Current.GoToAsync($"{state.Location}/{destinationRoute}?name={animalName}");
        Shell.Current.FlyoutIsPresented = false;
您可以从下面的liink下载源文件。

更新:

登记路线:

 void RegisterRoutes()
    {
        routes.Add("monkeydetails", typeof(MonkeyDetailPage));
        routes.Add("beardetails", typeof(BearDetailPage));
        routes.Add("catdetails", typeof(CatDetailPage));
        routes.Add("dogdetails", typeof(DogDetailPage));
        routes.Add("elephantdetails", typeof(ElephantDetailPage));

        foreach (var item in routes)
        {
            Routing.RegisterRoute(item.Key, item.Value);
        }
    }
然后使用路由参数导航到不同的页面

            ShellNavigationState state = Shell.Current.CurrentState;
        await Shell.Current.GoToAsync($"{state.Location}/{destinationRoute}?name={animalName}");
        Shell.Current.FlyoutIsPresented = false;
您可以从下面的liink下载源文件。

由于我一直在为这个任务和给出的答案而挣扎,下面是我如何完成它的:

1.)注册路由(AppShell.xaml.cs):

2.)定义外壳内容:

new ShellContent
{
    Title = "ShellContentTitle",
    Route = $"Container?bookingcodeproperty={queryParam}",
    ContentTemplate = new DataTemplate(typeof(Container))
}
3.)向视图添加注释:

[QueryProperty("BookingCodeProperty", "bookingcodeproperty")]
4.)在视图中设置绑定上下文:

public string BookingCodeProperty
{
    set
    {
        BindingContext = ContainerData.Containers.FirstOrDefault(m => m.BookingCode == Uri.UnescapeDataString(value));
    }
 }

5.)玩得开心。

因为我一直在为这个任务和给出的答案而挣扎,下面是我如何完成它的:

1.)注册路由(AppShell.xaml.cs):

2.)定义外壳内容:

new ShellContent
{
    Title = "ShellContentTitle",
    Route = $"Container?bookingcodeproperty={queryParam}",
    ContentTemplate = new DataTemplate(typeof(Container))
}
3.)向视图添加注释:

[QueryProperty("BookingCodeProperty", "bookingcodeproperty")]
4.)在视图中设置绑定上下文:

public string BookingCodeProperty
{
    set
    {
        BindingContext = ContainerData.Containers.FirstOrDefault(m => m.BookingCode == Uri.UnescapeDataString(value));
    }
 }

5.)玩得开心。

谢谢你的回复,温迪,但你误解了我的问题。两个ShellContent元素都指向同一个页面,但我需要从每个路由向页面传递不同的查询参数。这是筛选页面上显示的数据所必需的。在Route属性中未设置查询参数。稍后我会更新回复。你可以下载资源文件以供参考。谢谢Wendy。你一直在教我如何添加路线。我知道如何添加路线。我的问题是,当用户点击弹出项时,是否以及如何指定要传递到页面的其他数据。弹出项指向包含CollectionView的页面。它没有指向详细信息页面。如果您想使用route进行查询,可以在xaml的route中进行设置。URI结构是
//Route+/page?+QueryParameters
=>
//路线/页面?QueryParameters
。您可以在我的回复中查看示例代码。我也有同样的问题。温迪还没有解决这个问题。谢谢你的回复温迪,但是你误解了我的问题。两个ShellContent元素都指向同一个页面,但我需要从每个路由向页面传递不同的查询参数。这是筛选页面上显示的数据所必需的。在Route属性中未设置查询参数。稍后我会更新回复。你可以下载资源文件以供参考。谢谢Wendy。你一直在教我如何添加路线。我知道如何添加路线。我的问题是,当用户点击弹出项时,是否以及如何指定要传递到页面的其他数据。弹出项指向包含CollectionView的页面。它没有指向详细信息页面。如果您想使用route进行查询,可以在xaml的route中进行设置。URI结构是
//Route+/page?+QueryParameters
=>
//路线/页面?QueryParameters
。您可以在我的回复中查看示例代码。我也有同样的问题。温迪还没有解决。斯蒂芬,我也有同样的问题,你找到解决办法了吗?斯蒂芬,我也有同样的问题,你找到解决办法了吗?这实际上不起作用。当您将参数放入ShellContent应用程序的Route属性时崩溃。我尝试时它并没有崩溃。然而,我后来遇到了其他障碍,最终使用了不同的方法。对于我通过编程创建的菜单和内容,我现在直接使用参数作为路由,而不是作为查询参数。这实际上不起作用。当您将参数放入ShellContent应用程序的Route属性时崩溃。我尝试时它并没有崩溃。然而,我后来遇到了其他障碍,最终使用了不同的方法。对于通过编程创建的菜单和内容,我现在直接使用参数作为路由,而不是作为查询参数。