我在将命令(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手势?
谢谢!
答案 0 :(得分:4)
ListView的默认Click
事件将事件标记为已处理。尝试使用PreviewLeftClick
和PreviewLeftDoubleClick
代替
修改
由于MouseBindings
不包含PreviewLeftClick
或PreviewLeftDoubleClick
,请尝试使用找到的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);
}