在双击ListView时执行命令.(wpf - mvvm)

本文关键字:wpf mvvm 命令 双击 ListView 执行 | 更新日期: 2023-09-27 18:04:50

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

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

left - click和LeftDoubleClick手势没有被触发,但midleclick鼠标绑定工作完美(我已经测试了鼠标绑定一次一个…)。

左双击和中点手势的处理方式有区别吗?如果有,我怎么把我的命令绑定到左双击手势?

谢谢!

在双击ListView时执行命令.(wpf - mvvm)

ListView的默认Click事件将事件标记为已处理。尝试使用PreviewLeftClickPreviewLeftDoubleClick代替

编辑

由于MouseBindings不包含PreviewLeftClickPreviewLeftDoubleClick,请尝试使用这里找到的AttachedCommandBehavior代码,它允许您将Command附加到几乎任何Event

例如,

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

这是因为你的ListView的ListViewItems将吞下你的LeftClick事件,并将它们转换成漂亮的SelectionChanged事件。因为ListViewItems不会响应midleclick,所以这将按预期工作。

您可能希望通过处理与事件相匹配的预览来"在"此单击之前。

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

并在处理程序中调用命令:

private void OnItemDoubleClick(object sender, MouseButtonEventArgs e)
{
     OpenSOACommand.Execute(null, this);
}