Команда Xamarin не стреляет при нажатии кнопки - PullRequest
0 голосов
/ 05 октября 2018

Я создал приложение Xamarin для тестирования, и по какой-то причине добавленная мной кнопка не будет запускать команду.Я попытался установить контекст из code-behind и 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 class:

public class BaseCommandHandler : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ICommand BaseCommand { get; set; }

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



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

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Итак, проблема в

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

Давайте сделаем шаг назад и поговорим о привязке.

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

Вы заметите, что {Binding ...} указывает движку XAML искать открытое свойство в контексте привязки.В этом случае мы хотим найти открытое свойство с именем «BaseCommand».Связывание дает довольно много вещей.Одной из таких вещей является прослушивание уведомления об изменении свойства.

Следующий вопрос: как мы уведомляем мнение о том, что команда может быть выполнена?или это в настоящее время не может быть выполнено?или свойство BaseCommand установлено на экземпляр ICommand вместо нуля?

Я обычно предпочитаю использовать закрытые поля для поддержки общедоступных свойств.

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

, таким образом, вы можете создавать уведомления так, как вам удобно, и они всегда будут подниматься при изменении значения BaseCommand.

0 голосов
/ 05 октября 2018
<Button Text="CLIK MIE" Command="{Binding BaseCommand}"/>

Вы используете MVVM, поэтому вам необходимо привязать ваши свойства из ViewModel к вашему View.

...