Xamarin形成MVVM删除我当前VM中的先前VM

时间:2019-07-12 09:09:11

标签: xamarin xamarin.forms navigation

我有一个主页: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
    {       
    }
}

我回到注册视图

1 个答案:

答案 0 :(得分:0)

如果只想弹出所有模式窗口,则应该可以继续调用PopModalAsync()直到Application.Current.MainPage.Navigation.ModalStack.Count为0,或者得到ArgumentOutofRangeException。

也就是说,您可能要考虑在这里使用其他方法。大多数需要登录页面的应用程序在显示时都不想加载任何其他页面。换句话说,除非用户已登录,否则您不希望该用户返回到您的主页,因此您不希望堆栈上有其他任何内容。

为此,您可以使用登录和/或注册页面替换Application.Current.MainPage。登录完成后,将其替换为应用程序的主导航页面。