如何使用 Prism 松耦合 Xamarin.Forms 中的按钮按下和释放事件?

How to do loose coupling of button pressed and released events in Xamarin.Forms with Prism?

对于我当前的项目,我需要在 Xamarin.Forms 中捕获按钮按下和释放事件。但我想使用 Prism 保持松耦合。

一开始我用的是命令属性,像这样:

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

但命令 属性 仅在释放按钮时触发。为了单独按下和释放操作,我使用了 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 松散耦合?任何帮助将不胜感激。

在按钮上使用 EventToCommandBehavior。这将允许您在您正在处理的任何事情上利用任何事件,并在事件被触发时执行命令。

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

请注意,如果您有某种想要传递给命令的参数,您可以使用其他属性,该命令可能是 EventArgs 中的 属性,或者您完全想要的其他内容喜欢绑定或指定。