![](/img/trans.png)
[英]WPF/MVVM - how to handle double-click on TreeViewItems in the ViewModel?
[英]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.