在列表视图进行DoubleClicked时执行命令。 (WPF - MVVM)

时间:2011-08-09 14:00:18

标签: c# wpf mvvm .net-4.0

我在将命令(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>

没有触发LeftClick和LeftDoubleClick手势,但MiddleClick鼠标绑定工作正常(我已经一次测试了一个鼠标绑定......)。

处理LeftDoubleClick和MiddleClick手势的方式有何不同?如果有,我如何将我的ICommand绑定到LeftDoubleClick手势?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

修改

由于MouseBindings不包含PreviewLeftClickPreviewLeftDoubleClick,请尝试使用找到的AttachedCommandBehavior代码here,以便附加Command几乎任何Event

例如,

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

答案 1 :(得分:1)

这是因为ListView的ListViewItems将吞下LeftClick事件并将它们转换为精美的SelectionChanged事件。由于ListViewItems不会响应MiddleClick,因此可以按预期工作。

您可能希望通过处理匹配的预览等效事件来获得此点击的“前方”。

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

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

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