C# 双击ListView时执行命令。(WPF-MVVM)

C# 双击ListView时执行命令。(WPF-MVVM),c#,wpf,mvvm,.net-4.0,C#,Wpf,Mvvm,.net 4.0,我在将命令(ICommand)绑定到ListView的鼠标绑定时遇到一些困难。 我使用这段XAML代码来测试不同的鼠标手势: <ListView.InputBindings> <MouseBinding Command="{Binding OpenSOACommand}" Gesture="LeftClick" /> <MouseBinding Command="{Binding OpenSOACommand}" Gesture="MiddleCli

我在将命令(ICommand)绑定到ListView的鼠标绑定时遇到一些困难。 我使用这段XAML代码来测试不同的鼠标手势:

<ListView.InputBindings>
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="LeftClick" />
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="MiddleClick" />
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="LeftDoubleClick" />
</ListView.InputBindings>

LeftClick和LeftDoubleClick手势没有被触发,但是MiddleClick鼠标绑定工作得非常完美(我一次测试了一个鼠标绑定…)

LeftDoubleClick和MiddleClick手势的处理方式是否有差异?如果有,我如何将我的ICommand绑定到LeftDoubleClick手势


谢谢

ListView的默认
单击事件将事件标记为已处理。尝试改用
PreviewLeftClick
PreviewLeftDoubleClick

编辑

由于
MouseBindings
不包含
PreviewLeftClick
PreviewLeftDoubleClick
,请尝试使用
AttachedCommandBehavior
找到的代码,该代码允许您将
命令
附加到任何
事件

比如说,

<ListView local:CommandBehavior.Event="PreviewMouseDown" 
          local:CommandBehavior.Command="{Binding OpenSOACommand}" />

这是因为ListView中的ListViewItems将吞并LeftClick事件,并将其转换为尼斯SelectionChanged事件。由于ListViewItems不会响应MiddleClick,因此这将按预期工作

您可能希望通过处理事件的匹配预览等价物来“提前”完成此单击

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemDoubleClick"/>
    </Style>
</ListView.ItemContainerStyle>

谢谢,我会试一试的,虽然当我可以直接在XAML中绑定命令时,我并不真的想在我的代码中处理事件…我承认,这很难看。。但是,在处理命令之前,您不能更改ListView吞噬单击事件的行为。
private void OnItemDoubleClick(object sender, MouseButtonEventArgs e)
{
     OpenSOACommand.Execute(null, this);
}