如何从 Xamarin.Forms 棱镜弹出窗口导航回来
How to Navigateback from Xamarin.Forms Prism Popup
Xamarin.forms 在以下情况下无法使用 Prism Navigation 返回:
- App.xaml.cs 在
OnInitialized
NavigationService.NavigateAsync(nameof(LoginView));
- 登录后在 LoginViewModel 中导航到 MainPage
await _navigationService.NavigateAsync(new Uri("MainPage", UriKind.Relative),useModalNavigation:true, animated: false);
- MainPaga 有一个按钮,一旦我单击按钮,它将弹出设置页面导航弹出窗口,如:
await _navigationService.NavigateAsync(new Uri("SettingView", UriKind.Relative), useModalNavigation: true, animated: false);
SettingView(Popup) 有一个 Button(LogOut),一旦我点击 Button(LogOut),它必须返回到 LoginView,这里是返回导航的代码。
await _navigationService.ClearPopupStackAsync(animated: false);
await _navigationService.GoBackAsync(useModalNavigation: true, animated: false);
首先我正在清除弹出窗口然后导航回来,但它不会导航回登录视图?
如果您正在使用 PRISM 并且想要 'clear' 当前堆栈。
您最好使用明确的 uri 导航。
这意味着注销按钮背后的代码应该如下所示
await _navigationService.NavigateAsync("/NavigationPage/LoginView");
在URI开头加上/,会清空当前栈
在用户确认注销后,您应该只使用绝对 uri 将登录页面设置为主页面
await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));
Xamarin.forms 在以下情况下无法使用 Prism Navigation 返回:
- App.xaml.cs 在
OnInitialized
NavigationService.NavigateAsync(nameof(LoginView));
- 登录后在 LoginViewModel 中导航到 MainPage
await _navigationService.NavigateAsync(new Uri("MainPage", UriKind.Relative),useModalNavigation:true, animated: false);
- MainPaga 有一个按钮,一旦我单击按钮,它将弹出设置页面导航弹出窗口,如:
await _navigationService.NavigateAsync(new Uri("SettingView", UriKind.Relative), useModalNavigation: true, animated: false);
SettingView(Popup) 有一个 Button(LogOut),一旦我点击 Button(LogOut),它必须返回到 LoginView,这里是返回导航的代码。
await _navigationService.ClearPopupStackAsync(animated: false); await _navigationService.GoBackAsync(useModalNavigation: true, animated: false);
首先我正在清除弹出窗口然后导航回来,但它不会导航回登录视图?
如果您正在使用 PRISM 并且想要 'clear' 当前堆栈。 您最好使用明确的 uri 导航。 这意味着注销按钮背后的代码应该如下所示
await _navigationService.NavigateAsync("/NavigationPage/LoginView");
在URI开头加上/,会清空当前栈
在用户确认注销后,您应该只使用绝对 uri 将登录页面设置为主页面
await NavigationService.NavigateAsync(new System.Uri("/LoginPage",System.UriKind.Absolute));