簡體   English   中英

當ListView被DoubleClicked時執行命令。 (WPF-MVVM)

[英]Executing a Command when a ListView is DoubleClicked. (WPF - MVVM)

我在將命令(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手勢?

謝謝!

ListView的默認Click事件將事件標記為已處理。 嘗試改用PreviewLeftClickPreviewLeftDoubleClick

編輯

由於MouseBindings不包含PreviewLeftClickPreviewLeftDoubleClick ,請嘗試使用此處找到的AttachedCommandBehavior代碼,該代碼可讓您將Command附加到幾乎任何Event

例如,

<ListView local:CommandBehavior.Event="PreviewMouseDown" 
          local:CommandBehavior.Command="{Binding OpenSOACommand}" />

這是因為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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM