Не удается открыть определенную страницу в TabbedPage с помощью Prism Navigation - PullRequest
0 голосов
/ 11 мая 2018

У меня есть TabbedPage с двумя вкладками в моем приложении, и я хочу использовать NavigateAsync для перехода на указанную вкладку, но когда я использую NavigationService.NavigateAsync («NavigationPage / TabbedPage / SelectedPage»), мое приложение открывает только SelectedPage с TabbedPage встек.Я могу нажать на кнопку «Назад» в SelectedPage, чтобы вернуться к TabbedPage.

Кто-нибудь имел какие-либо идеи о том, что не так?

Вот мой Axel TabbedPage:

<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>

Вот мой метод 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");
        }

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Решение было размещено по этой ссылке https://forums.xamarin.com/discussion/comment/330770#Comment_330770

Поведение для навигации изменилось в версии 7 призмы.Новое поведение для открытия определенной вкладки:

NavigateAsync("TabbedPage?selectedTab=PageName")
0 голосов
/ 12 мая 2018

Хорошее решение - установить имя для дочерних страниц с вкладками и вызвать функцию NavigateAsync, используя имя страницы и имя нужной вкладки через NavigationParameters.Проверьте следующий пример:

Частичный XAML из YourTabbedPage.

...
<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")
    );
}
...

Iнадеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...