当我从页面 A 导航到页面 B 时,我需要删除页面 A。
如何使用 Xamarin Forms 中的 Prism 导航服务执行此操作?
人们在这方面会遇到一些场景。
举一个常见的例子,假设您有一个登录页面,一旦用户成功登录,您想要导航到主页。您的代码可能如下所示:
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;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)