當用戶驗證正確時,它將被引導至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