繁体   English   中英

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

[英]How to fire a command on double-click listbox item using MVVM?

当用户双击列表框项时,我试图启动 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”都应该执行相同的命令。 使用鼠标时,我可以看到列表框项被选中。 我有一种预感,即 MouseBinding Command 属性不是依赖属性,但我不知道如何确认这一点。

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

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

有一些方法可以执行此操作: 双击ListBox项以打开浏览器

关于为什么MVVM中的一点代码隐藏不一定是一件可怕的事情的一些讨论: 使用MVVM从WPF ListView项目中点击双击事件

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

似乎ListBox不处理ListBoxItem上的双击。 这是一个很好的答案: 无法将Command绑定到ListBox

人们可能会争辩说天气与否代码隐藏很糟糕,但它可以使用命令。 像这样将 LeftDoubleClick 手势添加到 ItemTemplate:

<UserControl.Resources>
    <DataTemplate x:Key="BrowseTemplate" >
        <StackPanel >
            <StackPanel.InputBindings>
                <MouseBinding Gesture="LeftDoubleClick"
                              Command="{Binding DataContext.PlayVideoCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Mode=OneWay}" 
                              CommandParameter="{Binding }" />
            </StackPanel.InputBindings>
            <TextBlock Text="{Binding }" Width="50" />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM