我想调用一个位于class LoginViewModel
的方法,但它是不可能的。如何从Login.xaml.cs代码后面访问它,以便我可以调用Connexion()
方法?
Login.xaml
<Button
StyleId="btn_connexion"
Text="Connexion"
Clicked="Connexion_click" />
Login.xaml.cs
private void Connexion_click(object sender, EventArgs e)
{
//here is where i'd like to call the connexion method
}
LoginViewModel.cs
public async Task Connexion()
{
List<Visiteur> listeTest = CreerListeVisiteurDur();
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
foreach (Visiteur unVisiteur in listeTest)
{
string login = unVisiteur.login;
string pass = unVisiteur.mdp;
if (login == username && pass == password)
{
App.Current.MainPage = new CreerVisite();
}
}
}
答案 0 :(得分:0)
我认为你应该使用&#34; Binding&#34;使用命令,而不是单击
类似
<Button
StyleId="btn_connexion"
Text="Connexion"
Command="{Binding OpenPageCommand}" />
和你的ViewModel类似
this.OpenPageCommand = new Command(async () => {
try {
List<Visiteur> listeTest = CreerListeVisiteurDur();
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
foreach (Visiteur unVisiteur in listeTest)
{
string login = unVisiteur.login;
string pass = unVisiteur.mdp;
if (login == username && pass == password)
{
App.Current.MainPage = new CreerVisite();
}
}
}
}
catch (Exception ex) {
await Application.Current.MainPage.DisplayAlert("Attention", ex.Message, "Ok");
}
});
答案 1 :(得分:0)
我同意{{3}}关于您选择的设计模式;但是,您可以使用下面的代码来实现您的要求。
<强> BtnClicker.xaml.cs 强>
namespace BountyApp.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class BtnClicker : ContentPage
{
BtnClickerViewModel model = new BtnClickerViewModel();
public BtnClicker()
{
InitializeComponent();
BindingContext = model;
}
private void Button_Clicked(object sender, EventArgs e)
{
Device.BeginInvokeOnMainThread(async () =>
{
await model.Connexion();
});
}
}
class BtnClickerViewModel : INotifyPropertyChanged
{
public async Task Connexion()
{
List<Visiteur> listeTest = CreerListeVisiteurDur();
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
foreach (Visiteur unVisiteur in listeTest)
{
string login = unVisiteur.login;
string pass = unVisiteur.mdp;
if (login == username && pass == password)
{
App.Current.MainPage = new CreerVisite();
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
<强> BtnClicker.xaml 强>
这个按钮很大,所以你需要适当调整它。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="BountyApp.Pages.BtnClicker"
Title="BtnClicker">
<Button StyleId="btn_connexion" Text="Connexion" Clicked="Button_Clicked"></Button>
</ContentPage>