如何使用 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 中的 属性,或者您完全想要的其他内容喜欢绑定或指定。
对于我当前的项目,我需要在 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 中的 属性,或者您完全想要的其他内容喜欢绑定或指定。