Xamarin.forms 如何向Xamarin Forms应用程序中的ShellContent项添加路由查询参数
我有一个列出购买请求的ContentPage。我正在尝试向AppShell.xaml添加弹出式视觉层次结构。导航需要具有将导航到同一页面的项目,但应传递一个查询参数,然后页面将使用该参数过滤页面上的数据。因此,route属性需要如下所示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
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属性时崩溃。我尝试时它并没有崩溃。然而,我后来遇到了其他障碍,最终使用了不同的方法。对于通过编程创建的菜单和内容,我现在直接使用参数作为路由,而不是作为查询参数。