Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此事件处理程序转换为命令?_C#_Wpf - Fatal编程技术网

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>