Xamarin Forms 导航页面未正确重定向我的页面

Xamarin Forms navigation page doesn't redirect my page correctly

我有几个页面需要导航到。我有一个基本的登录页面,当用户正确输入时,我会将用户重定向到我的主页。当我点击登录按钮时,我想要的页面不会出现在屏幕上。

if (Username == user.username && Password == user.password)
   {
      await App.Current.MainPage.DisplayAlert("successfully logged in", "", "Ok");
      await App.Current.MainPage.Navigation.PushAsync(new HomePage());
    }

这是我试图将我的主页推送到屏幕上的地方,但它只有在我单击模拟器的后退按钮时才可见。我确信 if 块可以正常工作,因为我可以看到我的显示警报显示已成功登录。我已经在 App.xaml.cs 中将我的 MainPage 声明为 NavigationPage。这真的很奇怪,但有人可以帮忙吗?

编辑

我有 4 个页面可以从它们导航到它们。

  1. 主页(只有 2 个按钮用于登录或注册)
  2. 登录页面(用于验证用户和导航至主页的单个按钮)
  3. 注册页面(目前不重要)
  4. 首页

通过主页,我曾经有代码以便在 MainPage.xaml.cs 文件中导航:

private async void loginBtnClicked(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new LoginPage());
    }
    private async void signUpBtnClicked(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new SignUpPage());
    }

成功导航到登录页面并输入正确的用户名和密码后,我尝试在我的 LoginPageViewModel.cs 中导航并验证它:

 private async void Login()
    {
        if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password))
            await App.Current.MainPage.DisplayAlert("Empty Values", "Please enter Email and Password", "OK");
        else
        {
            var user = await FirebaseHelper.GetUser(Username);
            if (user != null)
                if (Username == user.username && Password == user.password)
                {
                    await App.Current.MainPage.DisplayAlert("Successfully logged in", "", "Ok");
                    await App.Current.MainPage.Navigation.PushAsync(new HomePage());
                }
                else
                    await App.Current.MainPage.DisplayAlert("Login Failed", "Please enter correct Email or Password", "OK");
            else
                await App.Current.MainPage.DisplayAlert("Login Failed", "User not found", "OK");
        }
    }

然后我想也许它不起作用,因为我正在使用 Navigation.PushAsync(new LoginPage()) 在某些页面中,但在其他页面中,我使用的是其他内容:App.Current.MainPage.Navigation.PushAsync(new HomePage());

但这并没有解决我的问题。

我发布了我的解决方案,但我认为它不是永久性的或正确的,但只是让我暂时解决了这个奇怪的问题。

刚刚使用 MVVM 更改了所有导航。你看,在我的应用程序开始时,我在 .xaml.cs 文件中的按钮 Clicked() 方法中编写了我的 Navigate.PushAsync() 代码,但是当我使用 Command="{Binding SomeCommandName }" 使用 ViewModel 文件问题消失了。我什至没有更改相关文件中的任何内容。但是还是不知道为什么我不能同时使用这两种方式。

考虑到如果开始使用主页是好的,但是 PushAsync 不能正常工作,我怀疑它是 如何 你得到代码的问题已显示。需要查看从按钮按下到那几行代码的完整代码,再说。

Work-Around:

为确保 Xamarin Forms“处于良好状态”以转换到新页面:包装在 BeginInvokeOnMainThread 中:

...
Device.BeginInvokeOnMainThread(async () => {
    await App.Current.MainPage.DisplayAlert("successfully logged in", "", "Ok");
    await App.Current.MainPage.Navigation.PushAsync(new HomePage());
});