(也在Microsoft论坛上发布了此问题)
类似于How do I add a route query parameter to a ShellContent item in a Xamarin Forms app,但这个线程没有帮助我。
我最近开始了一个新项目,并决定使用Xamarin Forms Shell。
我有一个单一的内容页面,根据提供的查询参数,它的行为不同。有三个选项卡项目将路由到同一个内容页面,每个选项卡项目提供不同的查询参数。
我不知道如何通过AppShell.xaml路由将这个参数传递给我的内容页面视图模型。
请看我下面的示例代码,它复制了这个需求。
在这个示例中,我想使用xaml路由中提供的查询参数设置内容页面标签。使用下面的代码,我得到了一个空引用异常。
AppShell.xaml:
<FlyoutItem Title="Sample">
<Tab Title="Red">
<ShellContent Route="SamplePage?Parameter=Red" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
<Tab Title="Blue">
<ShellContent Route="SamplePage?Parameter=Blue" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
<Tab Title="Green">
<ShellContent Route="SamplePage?Parameter=Green" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
</FlyoutItem>
字符串
SamplePageVM:
[QueryProperty(nameof(Parameter), nameof(Parameter))]
public class SamplePageVM
{
public string Parameter { get; set; }
}
型
SamplePage.xaml:
<ContentPage.Content>
<Grid>
<Label Text="{Binding Parameter}"/>
</Grid>
</ContentPage.Content>
型
任何帮助都将不胜感激。或者其他方法来处理这个问题。
非常感谢.
- 编辑
下面是我目前的工作方法。
AppShell.xaml:
<FlyoutItem Title="Sample">
<Tab Title="Red">
<ShellContent Route="RedRoute" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
<Tab Title="Blue">
<ShellContent Route="BlueRoute" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
<Tab Title="Green">
<ShellContent Route="GreenRoute" ContentTemplate="{DataTemplate sample:SamplePage}" />
</Tab>
</FlyoutItem>
型
AppShell.xaml.cs
protected override void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
if (args.Target.Location.OriginalString.ToLower().Contains("redroute"))
{
StaticHelper.Parameter = "Red";
}
else if (args.Target.Location.OriginalString.ToLower().Contains("blueroute"))
{
StaticHelper.Parameter = "Blue";
}
else if (args.Target.Location.OriginalString.ToLower().Contains("greenroute"))
{
StaticHelper.Parameter = "Green";
}
}
型
SamplePageVM:
public class SamplePageVM
{
public string Parameter { get; set; }
public SamplePageVM()
{
Parameter = StaticHelper.Parameter;
}
}
型
SamplePage.xaml:
<ContentPage.Content>
<Grid>
<Label Text="{Binding Parameter}"/>
</Grid>
</ContentPage.Content>
型
可能不是最好的做法,但也是个办法。
2条答案
按热度按时间quhf5bfb1#
我可以重现这个异常。查看截图:https://i.stack.imgur.com/RfuEZ.jpg
字符串
像下面这样更改
Route
将修复此异常。型
如果要使用查询参数,请使用包含所有三个组件的URI调用GoToAsync方法,结构为:
//route/page?queryParameters
。型
有关详细信息,您可以从下面的链接下载代码示例。https://learn.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/userinterface-xaminals/
np8igboo2#
您可以直接在Page ViewModel中设置与路由命名相关的Parameter属性,而无需重写Shell中的OnNavigating方法:
字符串