当我获得Access令牌并且用户成功登录或用户输入错误的用户名或密码时出现错误消息后,我如何将用户导航到仪表板页面
这是我的登录viewmodel
using RoyalSales.Views;
using System.Windows.Input;
using Xamarin.Forms;
using RoyalSalesAPI.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Android.App;
using Android.Content.Res;
using RoyalSales.Helpers;
namespace RoyalSales.ViewModels
{
class LoginViewModel
{
private APIServices _APIServices = new APIServices();
public string Username { get; set; }
public string Password { get; set; }
public String Message { get; set; }
public ICommand Logincommand => new Command(async () =>
{
var accesssToken = await _APIServices.LoginAsync(Username, Password);
if (!string.IsNullOrEmpty(accesssToken))
{
Message = "login succeed";
Settings.Username = Username;
Settings.Password = Password;
Settings.AccessToken = accesssToken;
// here i want navigate user to dashboard page
}
else
{
Message = "wrong username or password";
// here i want show message dialoge to tell user theres an wrong username or
password
}
});
public ICommand LogOutcommand
{
get
{
return new Command( () =>
{
Settings.AccessToken = null;
});
}
}
public LoginViewModel()
{
if (!string.IsNullOrEmpty(Settings.Username))
{
Username = Settings.Username;
Password = Settings.Password;
}
}
}
}
这是我的loginpage.cs
using Javax.Security.Auth;
using RoyalSales.Views;
using Android.Provider;
using RoyalSalesAPI.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using RoyalSales.ViewModels;
using RoyalSales.Helpers;
using Settings = RoyalSales.Helpers.Settings;
namespace RoyalSales
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class Login : ContentPage
{
public APIServices aPIServices = new APIServices();
private string accessToken = Settings.AccessToken.ToString();
public Login()
{
InitializeComponent();
NavigationPage.SetHasNavigationBar(this, false);
}
private async void Button_Clicked(object sender, EventArgs e)
{
}
}
}
这是我的loginpage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
x:Class="RoyalSales.Login"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:RoyalSales.ViewModels;assembly=RoyalSales"
Title="login page"
BackgroundColor="#F38906">
<ContentPage.BindingContext>
<viewModels:LoginViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<StackLayout
Padding="20"
Orientation="Vertical"
Spacing="30">
<BoxView HeightRequest="20" />
<Image
HorizontalOptions="Center"
Source="almotaheda.png"
WidthRequest="175" />
<Label
FontSize="Large"
HorizontalOptions="Center"
Text="slogn"
TextColor="White" />
<Frame BackgroundColor="#FBD7AC" HasShadow="False">
<StackLayout Orientation="Vertical" Spacing="10">
<Entry
x:Name="UserNameEntry"
HeightRequest="40"
HorizontalTextAlignment="Center"
Placeholder="username"
PlaceholderColor="#F38906"
Text="{Binding Username}"
TextColor="Black" />
<Entry
x:Name="PasswordEntry"
HeightRequest="40"
HorizontalTextAlignment="Center"
IsPassword="True"
Placeholder="Password"
PlaceholderColor="#F38906"
Text="{Binding Password}"
TextColor="Black" />
</StackLayout>
</Frame>
<Label
FontSize="20"
Text="{Binding Message}"
TextColor="#FFFFFF" />
<Button
BackgroundColor="White"
Command="{Binding Logincommand}"
FontAttributes="Bold"
FontSize="20"
HorizontalOptions="FillAndExpand"
Text="login"
TextColor="#F38906"
Clicked="Button_Clicked"/>
<BoxView HeightRequest="20" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
如果成功登录,请帮助我将用户导航到仪表板页面;如果用户名或密码错误,则帮助我导航到错误消息
答案 0 :(得分:0)
设置PushAsync
PushModalAsync
或AccessToken
例如:
await App.Current.MainPage.Navigation.PushAsync(new dashboardPage(), true);
要从viewmodel显示警报,您可以使用:
await Application.Current.MainPage.DisplayAlert("Error", "Login message here", "Dismiss");