Xamarin Prism - 从标签页导航到新页面不会打开/推送新页面

问题描述

最近我在我的 TabbedPage 应用程序中实现了一个 Xamarin.Forms。但是,这给 Prism 带来了一些导航问题。我认为它应该是显而易见的,但我似乎无法弄清楚它是什么。

我使用 TabbedPage 作为我的起始页,其中包含多个选项卡。起始标签 HomePage 包含一个列表,点击这些列表项时,它将导航到另一个页面,该页面应作为新页面打开(因此覆盖整个标签页)。在实现 TabbedPage 之前这工作正常,但现在页面没有被打开,而它是 viewmodel 并且后端页面代码正在加载/初始化就好了,但页面本身(XAML ) 只是不会显示

我感觉它正在打开,但出于同样的原因,它位于 TabbedPage 后面。

在阅读了几篇文章后,(其中一个是:Xamarin Prism Android won't lose TabbedPage or change NavigationPage),我已经尝试了以下没有任何效果

  1. 在我的 useModalNavigation: false 方法中设置 NavigateAsync
  2. 更改前往MyTabbedPage/MYChildTabPage/TheGoToPage的路线
  3. 尝试从 NavigationPage XAML 中删除标签页面

标签页:

<TabbedPage
    x:Class="PCS2.APP.RoottabbedPage"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
    xmlns:local="clr-namespace:PCS2.APP"
    xmlns:prism="http://prismlibrary.com"
    android:TabbedPage.ToolbarPlacement="Bottom"
    prism:viewmodelLocator.Autowireviewmodel="True"
    BarBackgroundColor="#F5F5F5"
    NavigationPage.HasNavigationBar="False"
    SelectedTabColor="{DynamicResource AccentColor}"
    SelectedTabIndex="{Binding SelectedTab}"
    UnselectedTabColor="#979797">

    <TabbedPage.Children>

        <NavigationPage Title="Mijn Taken">
            <x:Arguments>
                <local:HomePage />
            </x:Arguments>
            <NavigationPage.IconImageSource>
                <FontimageSource
                    FontFamily="{StaticResource IconsFontFamily}"
                    Glyph="{x:Static local:FontawesomeSolidFont.Tasks}"
                    Size="25" />
            </NavigationPage.IconImageSource>
        </NavigationPage>
        
        <NavigationPage Title="DKS">
            <x:Arguments>
                <local:DKSPage />
            </x:Arguments>
            <NavigationPage.IconImageSource>
                <FontimageSource
                    FontFamily="{StaticResource IconsFontFamily}"
                    Glyph="{x:Static local:FontawesomeSolidFont.CalendarCheck}"
                    Size="25" />
            </NavigationPage.IconImageSource>
        </NavigationPage>
        
        <!-- few other tabs left out for readability --> 

    </TabbedPage.Children>
</TabbedPage>

TabbedPage viewmodel(没什么特别的):

public class Roottabbedviewmodel : viewmodelBase
{
    private readonly INavigationService _navigationService;


    public Roottabbedviewmodel(INavigationService navigationService) : base(navigationService)
    {
        _navigationService = navigationService;
    }

}

** viewmodelBase 具有以下实现:BindableBase,IInitialize,IInitializeAsync,INavigationAware,IDestructible

标签页面viewmodel(HomePage):

public class Homeviewmodel : viewmodelBase
{
    private readonly INavigationService _navigationService;
    private bool _showShimmer;

    public Homeviewmodel(INavigationService navigationService)
       : base(navigationService)
    {
        _navigationService = navigationService;
    }

    public override async Task InitializeAsync(INavigationParameters parameters)
    {
        try
        {
           // Loading data logic (which works),omitted for readability

        }
        catch (Exception ex)
        {
            ShowShimmer = false;
            throw;
        }
        finally
        {
            ShowShimmer = false;
        }
    }

    public override void OnNavigatedTo(INavigationParameters parameters)
    {
       // Some logic when navigating back to this page
    }


    private async Task LocationSelected(Projects location)
    {
        var parameters = new NavigationParameters
        {
            { "clientId",location.ClientId },{ "projectId",location.ProjectId }
        };

        await _navigationService.NavigateAsync("LocationPage",parameters,useModalNavigation: false,false);
    }

}

** LocationSelected 事件被触发,当它到达 NavigateAsync 时,我可以看到 LocationPage 的正确 viewmodel 正在被初始化。

LocationPage viewmodel:

public class Locationviewmodel : viewmodelBase
{
    private readonly INavigationService _navigationService;

    public Locationviewmodel(INavigationService navigationService)
       : base(navigationService)
    {
        _navigationService = navigationService;
    }


    public override async Task InitializeAsync(INavigationParameters parameters)
    {
        try
        {
            // Initialize data logic - omitted for readability
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            
        }
    }

}

InitializeAsyncLocationviewmodel 被命中并没有错误地执行,但是在完成之后,XAML 很简单,没有被推到顶部(页面不可见)。任何想法如何让它发挥作用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)