Xamarin命令无法在按钮单击时触发

时间:2018-10-05 14:15:54

标签: xamarin button command click

我出于测试目的制作了Xamarin应用程序,由于某种原因,我添加的按钮不会触发该命令。我也尝试过从代码隐藏和xaml设置上下文,但是仍然无法正常工作。

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"
             xmlns:implementation="clr-namespace:RxposTestApp.Implementation;assembly=RxposTestApp"
             x:Class="RxposTestApp.Page">
    <ContentPage.BindingContext>
        <implementation:BaseCommandHandler/>
    </ContentPage.BindingContext>
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Welcome to Xamarin.Forms!"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
            <Button Text="CLIK MIE" Command="BaseCommand"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

BaseCommandHandler类:

公共类BaseCommandHandler:INotifyPropertyChanged     {         公共事件PropertyChangedEventHandler PropertyChanged;

    public ICommand BaseCommand { get; set; }

    public BaseCommandHandler()
    {
        BaseCommand = new Command(HandleCommand);
    }



    public void HandleCommand()
    {
       //should fire this method
    }
}

2 个答案:

答案 0 :(得分:1)

<Button Text="CLIK MIE" Command="{Binding BaseCommand}"/>

您正在使用MVVM,因此需要将ViewModel的属性绑定到View。

答案 1 :(得分:1)

问题是

<Button Text="CLIK MIE" Command="BaseCommand"/>

让我们退后一步,谈谈绑定。

<Button Text="CLIK MIE" Command="{Binding BaseCommand}"/>

您会注意到{Binding ...},它告诉XAML引擎在绑定上下文中查找公共属性。在这种情况下,我们要查找名为“ BaseCommand”的公共属性。绑定提供了很多东西。其中之一就是监听属性更改通知。

下一个问题是我们如何通知视图可以执行命令?还是当前无法执行?或BaseCommand属性设置为ICommand实例而不是null?

我通常更喜欢使用私有字段来支持公共财产。

private ICommand _baseCommand;
Public ICommand BaseCommand
{
    get
       {
           return this._baseCommand;
       }
    set
       {
           this._baseCommand = value;
           // Notification for the view. 
       }
}

这样您可以根据自己的喜好引发通知,并且在BaseCommand的值更改时将始终引发该通知。