尝试返回 MainPage 时导航不起作用(Xamarin、Prism)

Navigation doesn't work when trying to GoBack to MainPage (Xamarin, Prism)

我的项目中有一个 HelpPage,它在 BaseViewModel 上有一个带有此命令的 BackButton:

DelegateCommand _goBack;
        public DelegateCommand GoBack => _goBack
            ?? (_goBack = new DelegateCommand(async () => await ExecuteGoBack()));

 private async Task ExecuteGoBack()
        {
            await NavigationService.GoBackAsync();
        }

当我在主屏幕中导航到帮助页面时,此后退按钮不再起作用。没有错误被指控,它通过方法并且不做任何事情。我还尝试在 HelpPage 中放置一个按钮以导航到 mainScreen 而不是返回,但也不起作用。这是我第一次导航到主屏幕的方式:

        Device.BeginInvokeOnMainThread(async () =>
            await NavigationService.NavigateAsync($"/{App.GetMainPageName()}"));

并且在 App.cs 中:

public static string GetMainPageName()
        {
            Debug.WriteLine("App.cs: " + BluetoothModule.Instance.FirmwareVersion);
            switch (BluetoothModule.Instance.FirmwareVersion)
            {
                case FirmwareVersions.V1:
                    return nameof(MainPageV1);
                case FirmwareVersions.V2:
                    return nameof(MainPageV2V3);
                case FirmwareVersions.V3:
                    return nameof(MainScreen); 
                case FirmwareVersions.V4:
                    return nameof(MainPageV2V3);
                default:
                    return nameof(MainPageV2V3);
            }
        } 

这在 Prism doc Navigation Basics / section Navigating 中有解释。

查看“Absolute”与“Relative”导航的说明。

仅当您使用“相对”语法时,上一页才会被压入堆栈。

在你的情况下,那将是:

Device.BeginInvokeOnMainThread(async () =>
    await NavigationService.NavigateAsync(
        $"{App.GetMainPageName()}",   // <-- removed "/" at start of path.
        UriKind.Relative));   // <-- you are missing this parameter.

更新

根据评论,删除开头的“/”足以使其成为相对URL;指定 Relative 参数是可选的。