Как сделать слабую связь нажатых и отпущенных событий в Xamarin.Forms с Prism? - PullRequest
0 голосов
/ 09 октября 2019

Для моего текущего проекта мне нужно захватить нажатие кнопки и выпустить события в Xamarin.Forms. Но я хочу, чтобы все было свободно связано с помощью Prism.

Сначала я использовал свойство Command, например, так:

<Button x:Name="ButtonForward" Command="{Binding MoveUpCommand}" />

Но свойство Command срабатывает только при отпускании кнопки,Чтобы сделать отдельные нажатые и отпущенные действия, я использовал события в XAML:

<Button x:Name="ButtonForward" Pressed="ButtonForward_Pressed" Released="ButtonMove_Released"/>

и вызвал команды вручную в обработчиках событий в коде:

private void ButtonMove_Released(object sender, System.EventArgs e)
        {
            var vm = BindingContext as DirectControlViewModel;
            if (vm.MoveStopCommand.CanExecute(null))
                vm.MoveStopCommand.Execute(null);
        }

        private void ButtonForward_Pressed(object sender, System.EventArgs e)
        {
            var vm = BindingContext as DirectControlViewModel;
            if (vm.MoveUpCommand.CanExecute(null))
                vm.MoveUpCommand.Execute(null);
        }

Проблема в том, что онобольше не имеет слабой связи, поскольку View теперь должен знать свою ViewModel. Есть ли способ иметь кнопку, которая имеет отдельные команды для нажатых и отпущенных событий, сохраняя слабую связь между View и ViewModel? Любая помощь будет оценена.

1 Ответ

2 голосов
/ 09 октября 2019

Используйте EventToCommandBehavior на кнопке. Это позволит вам использовать любое Событие во всем, с чем вы работаете, и выполнять Команду при его запуске.

<Button>
  <Button.Behaviors>
    <prism:EventToCommandBehavior EventName="Pressed"
                                  Command="{Binding PressedCommand}" />
    <prism:EventToCommandBehavior EventName="Released"
                                  Command="{Binding ReleasedCommand}" />
  </Button.Behaviors>
</Button>

Обратите внимание, что есть дополнительные свойства, которые вы можете использовать, если у вас есть какой-то видПараметр, который вы хотите передать Команде, которая может быть свойством в EventArgs или чем-то еще, что вы хотите связать или указать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...