【问题标题】:Can't open specific page in TabbedPage with Prism Navigation无法使用 Prism Navigation 在 TabbedPage 中打开特定页面
【发布时间】:2018-10-22 07:01:04
【问题描述】:

我的应用程序中有一个带有两个选项卡的 TabbedPage,我想使用 NavigateAsync 导航到特定选项卡,但是当我使用 NavigationService.NavigateAsync(“NavigationPage/TabbedPage/SelectedPage”)时,我的应用程序只打开带有 TabbedPage 的 SelectedPage堆栈。我可以点击 SelectedPage 中的返回按钮返回到 TabbedPage。

有人知道出了什么问题吗?

这是我的 TabbedPage axml:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="correct namespace was hide"
            xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
            prism:ViewModelLocator.AutowireViewModel="True"
            x:Class="correct namespace was hide">
    <TabbedPage.Children>
        <local:Pacientes/>
        <local:Sobre/>
    </TabbedPage.Children>
</TabbedPage>

这是我在 App 类中的 OnInitialized 方法和 RegisterTypes:

protected override async void OnInitialized()
        {
            InitializeComponent();

            if (Device.RuntimePlatform.Equals(Device.Android))
            {
                await NavigationService.NavigateAsync("Android.Main/OdontoWayPacienteNavigation/Sobre");
            }
            else
            {
                await NavigationService.NavigateAsync("/NavigationPage/iOS.Main/Sobre");
            }
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<OdontoWayPacienteNavigation>();
            containerRegistry.RegisterForNavigation<NavigationPage>();
            containerRegistry.RegisterForNavigation<Pacientes>();
            containerRegistry.RegisterForNavigation<Clinicas>();
            containerRegistry.RegisterForNavigation<PacienteEdit>();
            containerRegistry.RegisterForNavigation<ClinicaMap>();
            containerRegistry.RegisterForNavigation<LinkWeb>();
            containerRegistry.RegisterForNavigation<Sobre>();
            containerRegistry.RegisterForNavigation<Views.Android.PacienteAcessos, PacienteAcessosViewModel>("Android.PacienteAcessos");
            containerRegistry.RegisterForNavigation<Views.iOS.PacienteAcessos, PacienteAcessosViewModel>("iOS.PacienteAcessos");
            containerRegistry.RegisterForNavigation<Views.Android.Main, MainViewModel>("Android.Main");
            containerRegistry.RegisterForNavigation<Views.iOS.Main>("iOS.Main");
        }

【问题讨论】:

    标签: xamarin xamarin.forms prism


    【解决方案1】:

    解决方案已发布在此链接https://forums.xamarin.com/discussion/comment/330770#Comment_330770

    在 prism 版本 7 中导航的行为发生了变化。打开特定标签的新行为是

    NavigateAsync("TabbedPage?selectedTab=PageName")
    

    【讨论】:

      【解决方案2】:

      一个好的解决方案是为子标签页设置一个名称,并通过NavigationParameters 使用页面名称和所需的标签名称调用NavigateAsync 函数。检查以下示例:

      YourTabbedPage 的部分 XAML。

      ...
      <TabbedPage.Children>
          <ContentPage Title="Tab 1" x:Name="tab1"/>
          <ContentPage Title="Tab 2" x:Name="tab2"/>
          <ContentPage Title="Tab 3" x:Name="tab3"/>
      </TabbedPage.Children>
      ...
      

      YourTabbedPage 需要知道OnNavigatingTo 何时发生。感谢 Prism,如果页面实现了接口INavigatingAware,它将能够读取导航参数。

      ...
      public partial class YourTabbedPage : TabbedPage, INavigatingAware
      {
          public YourTabbedPage()
          {
              InitializeComponent();
          }
      
          public void OnNavigatingTo(NavigationParameters parameters)
          {
              if (parameters.TryGetValue("tab", out string tabName) == true)
              {
                  SelectedItem = this.FindByName<Page>(tabName);
              }
          }
      }
      ...
      

      最后,直接导航到所需的标签。

      ...
      protected override void RegisterTypes(IContainerRegistry containerRegistry)
      {
          containerRegistry.RegisterForNavigation<YourTabbedPage>();
      }
      
      protected override void OnInitialized()
      {
          InitializeComponent();
          NavigationService.NavigateAsync(
              "YourTabbedPage", 
              new NavigationParameters($"tab=tab2")
          );
      }
      ...
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        相关资源
        最近更新 更多