TapGestureRecognizer не работает при нажатии метки - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь сделать ярлык наклеиваемым. Но когда я пытаюсь нажать на этикетку. Ничего не происходит. Я не вызываю команду.

Когда я отлаживаю ее, она никогда не вызывает команду, которую я установил.

Из ViewModel:

public ICommand TappedDateCommand => new Command<int>(ChangeToTappedDate);

private void ChangeToTappedDate(int position)
{
    Position = position;
    PositionChanged(position);
    OnPropertyChanged("Position");
}

Xaml:

<Label ...">
  <Label.GestureRecognizers>
    <TapGestureRecognizer  Command="{Binding TappedDateCommand}" CommandParameter="0" NumberOfTapsRequired="1" />
  </Label.GestureRecognizers>
</Label>

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

О команде привязки для lanel TapGestureRecognizer, я делаю один пример, который вы можете посмотреть:

Во-первых, изменив обработчик команды для принятия параметра и изменив метод для принятия параметра команды.

 public class RelayCommand1 : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public RelayCommand1(Action<object> execute)
        : this(execute, null)
    {
    }

    public RelayCommand1(Action<object> execute, Predicate<object> canExecute)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }

    public event EventHandler CanExecuteChanged;


    public void Execute(object parameter)
    {
        _execute(parameter);
    }
}

Тогда используйте код:

 <Label HorizontalOptions="CenterAndExpand" Text="Welcome to Xamarin.Forms!">
            <Label.GestureRecognizers>
                <TapGestureRecognizer
                    Command="{Binding command1}"
                    CommandParameter="55"
                    NumberOfTapsRequired="1" />
            </Label.GestureRecognizers>
        </Label>

public partial class Page20 : ContentPage
{
    public RelayCommand1 command1 { get; set; }

    public Page20 ()
    {
        InitializeComponent ();

        command1 = new RelayCommand1(obj => ChangeToTappedDate((string)obj));

        this.BindingContext = this;
    }

    public void ChangeToTappedDate(string position)
    {
        int value = int.Parse(position);
        Console.WriteLine("the position is {0}",value);
    }

}
0 голосов
/ 04 ноября 2019

Попробуйте использовать String вместо int.

public ICommand TappedDateCommand => new Command<string>(ChangeToTappedDate);

private void ChangeToTappedDate(string position)
{
    Position = Convert.ToInt32(position);
    PositionChanged(position);
    OnPropertyChanged("Position");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...