我有一个主页:HomeVM。 应用启动时,我将PushModalAsync用于RegistrationVM 在我的RegistrationVM中,我有一个按钮用于pushModalAsync-> LoginVM
连接用户后,我想返回到VM HomeVM,但是不可能,通过PopModalAsync,我回到RegistrationVM。
我想关闭所有popmodalasync。
我已经尝试过
在我的app.xaml中:
var mainPage = (Page)ViewFactory.CreatePage(typeof(HomeVM));
MainPage = new NavigationPage(mainPage)
{
BarBackgroundColor = (Color)Resources["PrimaryColor"],
BarTextColor = Color.White,
};
Navigation = MainPage.Navigation;
protected override void OnStart()
{
var registrationpage = (Page)ViewFactory.CreatePage(typeof(RegistrationVM));
MainPage.Navigation.PushModalAsync(registrationpage);
}
RegistrationVM:
public RegistrationVM()
{
Task.Run(async () => await ConnectionAPI());
}
async Task ConnectionAPI()
{
try
{
applicationContext.Device = mydevice;
await Navigation.PushModalAsync<LoginVM>(async (vm, p) => await vm.InitializeAsync(this));
}
catch (Exception e)
{
Log.Error(e, "Unhandled exception while loading touch points : {e}", e);
}
finally
{
}
}
LoginVM: 当用户单击“登录”时 PreviousVM = RegistrationVM。
async Task Login()
{
try
{
Log.Information("Logging in");
applicationContext.User = employe;
await Navigation.PopModalAsync();
await Navigation.RemoveAsync(previousVM);
}
catch (Exception e)
{
Log.Error(e, "Unhandled exception during log in : {e}", e);
}
finally
{
}
}
我回到注册视图
答案 0 :(得分:0)
如果只想弹出所有模式窗口,则应该可以继续调用PopModalAsync()直到Application.Current.MainPage.Navigation.ModalStack.Count为0,或者得到ArgumentOutofRangeException。
也就是说,您可能要考虑在这里使用其他方法。大多数需要登录页面的应用程序在显示时都不想加载任何其他页面。换句话说,除非用户已登录,否则您不希望该用户返回到您的主页,因此您不希望堆栈上有其他任何内容。
为此,您可以使用登录和/或注册页面替换Application.Current.MainPage。登录完成后,将其替换为应用程序的主导航页面。