Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用模型';Xamarin PCL项目中的视图中的s方法_Xamarin_Methods_Code Behind_Printer Control Language - Fatal编程技术网

如何调用模型';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>

谢谢您的回复,但是绑定上下文会导致应用程序本身关闭,我不明白为什么要引用这个答案