尝试返回 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
参数是可选的。
我的项目中有一个 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
参数是可选的。