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

时间:2021-05-26 17:26:59

标签: xamarin xamarin.forms navigation prism

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

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

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

当我在我的 MainScreen 中并导航到 HelpPage 时,此 BackButton 不再起作用。没有被指控的错误,它贯穿整个方法,只是不做任何事情。此外,我尝试在 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);
            }
        } 

1 个答案:

答案 0 :(得分:0)

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

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

只有在使用“Relative”语法时,上一页才会被压入堆栈。

在您的情况下,这将是:

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

更新

根据评论,去掉开头的“/”就足以使它成为一个相对URL;指定 Relative 参数是可选的。

相关问题