在双击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的默认Click
事件将事件标记为已处理。尝试使用PreviewLeftClick
和PreviewLeftDoubleClick
代替
由于MouseBindings
不包含PreviewLeftClick
或PreviewLeftDoubleClick
,请尝试使用这里找到的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);
}