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 个页面可以从它们导航到它们。
- 主页(只有 2 个按钮用于登录或注册)
- 登录页面(用于验证用户和导航至主页的单个按钮)
- 注册页面(目前不重要)
- 首页
通过主页,我曾经有代码以便在 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());
});
我有几个页面需要导航到。我有一个基本的登录页面,当用户正确输入时,我会将用户重定向到我的主页。当我点击登录按钮时,我想要的页面不会出现在屏幕上。
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 个页面可以从它们导航到它们。
- 主页(只有 2 个按钮用于登录或注册)
- 登录页面(用于验证用户和导航至主页的单个按钮)
- 注册页面(目前不重要)
- 首页
通过主页,我曾经有代码以便在 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());
});