C# 如何将此事件处理程序转换为命令?
父级是一个虚拟化面板。C# 如何将此事件处理程序转换为命令?,c#,wpf,C#,Wpf,父级是一个虚拟化面板。 我有点理解指挥背后的想法,但仍然难以理解如何实施它。此事件处理程序获取鼠标的X坐标并将其发送到ViewModel的positionX。如果我把它做成一个命令,我在哪里可以得到发送者和e的信息?通常,命令用于按钮式控件,当用户与它们交互时(单击按钮、点击按钮等)会触发这些控件 根据应用程序的设计和需要,命令有一个CanExecute和一个执行的处理程序或事件。 这些允许您设置命令是否可以执行,以及执行时应该发生什么 但是,您指的是一个PreviewMouseDown事件。
我有点理解指挥背后的想法,但仍然难以理解如何实施它。此事件处理程序获取鼠标的X坐标并将其发送到ViewModel的positionX。如果我把它做成一个命令,我在哪里可以得到发送者和e的信息?通常,
命令用于按钮式控件,当用户与它们交互时(单击按钮、点击按钮等)会触发这些控件
根据应用程序的设计和需要,命令有一个CanExecute
和一个执行的处理程序或事件。
这些允许您设置命令是否可以执行,以及执行时应该发生什么
但是,您指的是一个PreviewMouseDown
事件。
无法阻止系统触发此事件。因此,在这种情况下,新的命令的CanExecute
或多或少是无用的
为了仍然实现您的目标,您可以使用Ganesh在评论中已经指出的EventToCommand
机制。
下面的例子应该给你一个提示,它将如何工作:
private void GridSplitter_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
vm.positionX = e.GetPosition((sender as GridSplitter).Parent as UIElement).X;
}
您可以尝试从MVVMLight中调用EventToCommand,或者还有一个来自Expression Blend SDK的InvokeCommandAction
,例如look。但对于您的示例,我建议您定义一个InputBinding
。您好,谢谢大家的回复。到目前为止,我已经掌握了使用MVVM Light和常规命令进行指挥的诀窍。在另一种情况下,我尝试使用PreviewMouseMove事件创建命令。我认为目前的问题是我不知道如何使用命令将事件参数的值发送到视图模型。var currentPosX=e.GetPosition(发送方作为GridSplitter)。父元素作为UIElement)。X;
<ResourceDictionary>
<DataTemplate x:Key="PreviewMouseDownCommandTemplate">
<StackPanel>
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<command:EventToCommand Command="{Binding MyCommandProvider.PreviewMouseDownCommand,
Mode=OneWay,
Source={StaticResource Locator}}"
CommandParameter="{Binding Mode=OneWay}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<!-- Content -->
</StackPanel>
</DataTemplate>
</ResourceDictionary>