xamarin 从TabbedPage导航时导航堆栈为空(缺少后退按钮)

kulphzqa  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(216)

我有一个问题,我没有NavigationBar在我的页面上,这只是发生后,我实现了标签页在.NET MAUI与棱镜MVVM框架。任何帮助是非常感谢。
显示的所有页面及其视图模型都已注册为服务。

标签页导航代码

await _navigationService.NavigateAsync($"{nameof(HomePage)}?{KnownNavigationParameters.SelectedTab}={nameof(DashboardPage)}");

标签页

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage
    x:Class="TestApp.Views.HomePage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:android="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific;assembly=Microsoft.Maui.Controls"
    xmlns:local="clr-namespace:TestApp.Views;assembly=TestApp"
    android:TabbedPage.ToolbarPlacement="Bottom"
    AutomationId="home_page">

    <local:DashboardPage x:Name="dashboardPage" Title="Home" IconImageSource="icon_home_o" />
    <local:CommentListPage x:Name="commentListPage" Title="Comments" IconImageSource="icon_comment_o" />
    <local:MorePage x:Name="morePage" Title="More" IconImageSource="icon_ellipsis_o" />
</TabbedPage>

Dashboard页面视图模型(代码导航到另一个新视图):

//When the navigation happens, this page has NO navigation bar and this NO BACK BUTTON which is a problem
await _navigationService.NavigateAsync(nameof(TestListPage))

TestListPage初始化

public partial class TestListPage : ContentPage
{
    public TestListPage()
    {
        InitializeComponent();
        //nav stack has a count of 0
        var test = Navigation.NavigationStack;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        //nav stack has a count of 0
        var test = Navigation.NavigationStack;
    }
}
f4t66c6m

f4t66c6m1#

我有一个问题,我的页面上没有NavigationBar,这只是在我用Prism MVVM框架在.NET MAUI中实现Tabbed页面后发生的。
我测试了代码,和你描述的一样。你可以report it to GitHub。另外,你必须使用Prism MVVM框架?CommunityToolkit.Mvvm能实现你的需求吗?
关于导航,有一些提示:
虽然NavigationPage可以放在TabbedPage中,但不建议将TabbedPage放在NavigationPage中。
TabbedPage与.NET MAUI Shell应用程序不兼容,如果您尝试在Shell应用程序中使用TabbedPage,将引发异常。
更多详情请参考官方文档:TabbedPage

更新:

根据史蒂夫所说:
我做的一个变通方法是不使用NavigateAsync(nameof(TestListPage)),而是使用NavigateAsync($"/{nameof(NavigationPage)}/{nameof(HomePage)}/{nameof(TestListPage)}")
它可以解决问题。

相关问题