如何将参数传递给 AppShell TabBar 页面?

How to pass parameter to AppShell TabBar page?

我正在使用 Xamarin Forms 开发一个多平台应用程序,我需要将一个包含用户信息的参数从我的 LoginPage 传递到我的 HarvestPage(顺便说一句,这是一个农民应用程序)。我正在使用 MVVM 架构,但没有 MVVM 框架。

因此,用户在 LoginPage 中执行身份验证,然后应用程序导航到我的 AppShell,我有 4 个底部选项卡。

LoginPage.xaml.cs 中,我导航到我的 ShellPage 的第一个选项卡(此页面不需要参数):

private async void OnLoginClicked(LoginViewModel sender, Usuario args)
{
    Application.Current.MainPage = new AppShell(args);
    await Shell.Current.GoToAsync("//market");
}

然后在我的 AppShell.xaml 页面中声明我的选项卡的内容:

<TabBar>
    <ShellContent Title="Market" Icon="exchange.png" ContentTemplate="{DataTemplate local:MarketPage}" Route="market" />
    <ShellContent Title="Harvest" Icon="sugarcane.png" ContentTemplate="{DataTemplate local:HarvestPage}" Route="harvest" />
    ...
</TabBar>

然后在 AppShell.xaml.cs 中配置路由:

private Usuario _user;

public AppShell(Usuario user)
{
    InitializeComponent();

    _user = user;

    Routing.RegisterRoute(nameof(HarvestPage), typeof(HarvestPage));
    Routing.RegisterRoute(nameof(MarketPage), typeof(MarketPage));
    ...
}

用户信息已发送至 AppShell.xaml.cs,但如何将用户参数传递至我的 HarvestPage

我不能像其他问题中建议的那样使用 GoToAsync,因为没有导航按钮,从 MarketPage 到 HarvestPage 的导航是通过底部的选项卡。

您可以定义为public:

public Usuario User;

然后从您的 HarvestPage 使用:

访问它
(Shell.Current as AppShell).User