当用户验证正确时,它将被引导至HomeViewModel。我想删除它可以返回到登录屏幕的可能性,因此我创建了一个定制展示器以删除新屏幕下方的所有屏幕。Xamarin IOS如何清除堆栈?
的实现方式如下:
public class CustomPresenter: MvxFormsIosPagePresenter
{
public CustomPresenter(UIWindow window, MvxFormsApplication mvxFormsApp)
: base(window, mvxFormsApp)
{
}
public override void Show(MvxViewModelRequest request)
{
if (request.PresentationValues?["NavigationCommand"] == "StackClear")
{
var navigation = FormsApplication.MainPage.Navigation;
Debug.WriteLine("Navigation Back Stack Count -> " + navigation.NavigationStack.Count());
navigation.PopToRootAsync();
Debug.WriteLine("Navigation Back Stack Count After PopToRootAsync -> " + navigation.NavigationStack.Count());
return;
}
base.Show(request);
}
}
在认证过程中正确地完成,我浏览到主屏幕通过将一束用这个特殊的命令:
LoginWithFacebookCommand.Subscribe(token => {
Debug.WriteLine("JWT Token -> " + token);
_userDialogs.ShowSuccess(AppResources.Login_Success);
var mvxBundle = new MvxBundle(new Dictionary<string, string> { { "NavigationCommand", "StackClear" } });
ShowViewModel<HomeViewModel>(presentationBundle: mvxBundle);
});
的问题是,它不会改变屏幕,它停留在当前的屏幕上。什么才能正确地做到这一点?
我使用MvvmCross 5.1.1和MvvmCross.Forms 5.1.1
非常感谢你提前。
或者,你可以启动你的主屏幕,检查用户进行身份验证,并推模式与你的登录表单,如果他们需要登录。我已经使用像Prism这样的Mvvm框架,这使得操纵导航栈变得很容易,但我不确定它在MvvmCross中有多简单。 – Joe