我的项目中有一个 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);
}
}
答案 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
参数是可选的。