当我从第A页导航到第B页时,我需要删除第A页。
如何使用Xamarin Forms中的Prism导航服务?
答案 0 :(得分:3)
人们在这个场景中遇到了一些情况。
作为一个常见示例,假设您有一个LoginPage,并且一旦用户成功登录,您就想要导航到MainPage。您的代码可能如下所示:
public class App : PrismApplication
{
protected override async void OnInitialized()
{
await NavigationService.NavigateAsync("LoginPage");
}
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<LoginPage>();
Container.RegisterTypeForNavigation<MainPage>();
}
}
public class LoginPageViewModel : BindableBase
{
public DelegateCommand LoginCommand { get; }
private async void OnLoginCommandExecuted()
{
// Do some validation
// Notice the Absolute URI which will reset the navigation stack
// to start with MainPage
await _navigationService.NavigateAsync("/MainPage");
}
}
现在,如果你正在寻找的是导航堆栈看起来像MainPage/ViewA
的某个流程,而你想要的是MainPage/ViewB
并且你不想重新初始化MainPage,那么这是我们目前正在评估并希望改进这一点的内容,因此您可以执行_navigationService.NavigateAsync("../ViewB")
之类的操作。与此同时,我建议的是这样的:
public class ViewAViewModel : BindableBase
{
public DelegateCommand ViewBCommand { get; }
private async void OnViewBCommandExecuted()
{
var parameters = new NavigationParameters
{
{ "navigateTo", "ViewB" }
};
await _navigationService.GoBackAsync(parameters);
}
}
public class MainPageViewModel : BindableBase, INavigatedAware
{
public async void OnNavigatingTo(NavigationParameters parameters)
{
if(parameters. GetNavigationMode() == NavigationMode.Back &&
parameters.TryGetValue("navigateTo", out string navigateTo))
{
await _navigationService.NavigateAsync(navigateTo);
return;
}
}
}
答案 1 :(得分:2)
另一种方法是让您的网页实现INavigationAware
,并在OnNavigatedFrom
中调用Navigatin.RemovePage(this)
。
答案 2 :(得分:1)
我这样做,更简单。
navigationService.NavigateAsync(“ ../ PageB”);
我正在使用Prims 7.0.0.396。
答案 3 :(得分:0)
给出:“ NavigationPage / ViewA / ViewB / ViewC / ViewD”
使用以下方法从ViewD导航: NavigationService.NavigateAsync(“ ../../../ ViewE”);
结果为:“ NavigationPage / ViewA / ViewE”
引自here
需要棱镜> = 7.0