如何使用MVVM双击列表框项来触发命令?

时间:2012-06-23 19:41:58

标签: c# wpf mvvm dependency-properties

当用户双击列表框项目时,我正在尝试启动ICommand。此外,我正在尝试使用MVVM模式。

在这个XAML中,按键“p”完美运行。当我双击列表框时,命令永远不会启动。我设置了一个断点来确认没有通过双击调用“PlayVideoCommand”。我错过了什么或者我是否必须使用Setter(我不熟悉)?

<ListBox Name="SmallVideoPreviews" Grid.Column="1" MaxHeight="965"
    ItemsSource="{Binding BrowseVideos}" 
    ItemTemplate="{StaticResource BrowseTemplate}">
    <ListBox.InputBindings>
        <KeyBinding Key="p" 
            Command="{Binding PlayVideoCommand}"
            CommandParameter="{Binding ElementName=SmallVideoPreviews, Path=SelectedItem}"/>
        <MouseBinding Gesture="LeftDoubleClick"
            Command="{Binding PlayVideoCommand}"
            CommandParameter="{Binding ElementName=SmallVideoPreviews, Path=SelectedItem}"/>
    </ListBox.InputBindings>
</ListBox>

双击和“p”都应该执行相同的命令。使用鼠标时,我可以看到listboxitem已被选中。我有一个预感,MouseBinding Command属性不是依赖属性,但我不知道如何确认。

2 个答案:

答案 0 :(得分:11)

您的示例中发生的情况是列表框本身对双击做出反应,但仅限于列表框项未涵盖的部分区域。

您需要将事件处理程序绑定到listboxitem。

有些方法可以在这里: Double Click a ListBox item to open a browser

关于为什么MVVM中的一点代码隐藏不一定是一件可怕的事情的讨论: Firing a double click event from a WPF ListView item using MVVM

更多讨论: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

答案 1 :(得分:0)

似乎ListBox不处理对ListBoxItem的双击。这是一个很好的答案: Can't bind Command to ListBox