如何调用模型';Xamarin PCL项目中的视图中的s方法
我想调用位于如何调用模型';Xamarin PCL项目中的视图中的s方法,xamarin,methods,code-behind,printer-control-language,Xamarin,Methods,Code Behind,Printer Control Language,我想调用位于类LoginViewModel中的方法,但它不可访问。如何使它可以从Login.xaml.cs代码中访问,以便调用Connexion()方法 Login.xaml <Button StyleId="btn_connexion" Text="Connexion" Clicked="Connexion_click" /> LoginViewModel.cs public async Task
类LoginViewModel
中的方法,但它不可访问。如何使它可以从Login.xaml.cs代码中访问,以便调用Connexion()
方法
Login.xaml
<Button
StyleId="btn_connexion"
Text="Connexion"
Clicked="Connexion_click" />
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();
}
}
}
公共异步任务连接()
{
List LISTEST=CREERSTEVISITEURDUR();
如果(!string.IsNullOrEmpty(用户名)和&!string.IsNullOrEmpty(密码))
{
foreach(列表测试中的访问者和非访问者)
{
字符串login=unVisiteur.login;
字符串过程=unVisiteur.mdp;
if(login==用户名和密码)
{
App.Current.MainPage=新建CreerVisite();
}
}
}
我认为您应该对命令使用“绑定”,而不是单击
差不多
<Button
StyleId="btn_connexion"
Text="Connexion"
Command="{Binding OpenPageCommand}" />
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");
}
});
在你的视图模型中
<Button
StyleId="btn_connexion"
Text="Connexion"
Command="{Binding OpenPageCommand}" />
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");
}
});
this.OpenPageCommand=新命令(异步()=>{
试试{
List LISTEST=CREERSTEVISITEURDUR();
如果(!string.IsNullOrEmpty(用户名)和&!string.IsNullOrEmpty(密码))
{
foreach(列表测试中的访问者和非访问者)
{
字符串login=unVisiteur.login;
字符串过程=unVisiteur.mdp;
if(login==用户名和密码)
{
App.Current.MainPage=新建CreerVisite();
}
}
}
}
捕获(例外情况除外){
等待应用程序.Current.MainPage.DisplayAlert(“注意”,例如消息“Ok”);
}
});
我同意您选择的设计模式;但是,您可以使用下面的代码来实现您的要求
BtnClicker.xaml.cs
namespace-BountyApp.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
公共部分类BtnClicker:ContentPage
{
BtnClickerViewModel=新的BtnClickerViewModel();
公共BtnClicker()
{
初始化组件();
BindingContext=模型;
}
已单击私有无效按钮(对象发送者,事件参数e)
{
Device.beginInvokeMainThread(异步()=>
{
等待模型连接();
});
}
}
类BtnClickerViewModel:INotifyPropertyChanged
{
公共异步任务连接()
{
List LISTEST=CREERSTEVISITEURDUR();
如果(!string.IsNullOrEmpty(用户名)和&!string.IsNullOrEmpty(密码))
{
foreach(列表测试中的访问者和非访问者)
{
字符串login=unVisiteur.login;
字符串过程=unVisiteur.mdp;
if(login==用户名和密码)
{
App.Current.MainPage=新建CreerVisite();
}
}
}
}
公共事件属性更改事件处理程序属性更改;
void OnPropertyChanged([CallerMemberName]字符串propertyName=”“)=>
PropertyChanged?.Invoke(这是新的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>
谢谢您的回复,但是绑定上下文会导致应用程序本身关闭,我不明白为什么要引用这个答案