2011-08-09 39 views
2

我在將一個命令(ICommand)綁定到ListView的MouseBinding時遇到一些困難。 我用這段XAML代碼來測試不同的鼠標手勢:當ListView是DoubleClicked時執行命令。 (WPF - MVVM)

<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手勢?

謝謝!

回答

4

ListView的默認Click事件將事件標記爲已處理。嘗試使用PreviewLeftClickPreviewLeftDoubleClick代替

編輯

由於MouseBindings不包含PreviewLeftClickPreviewLeftDoubleClick,請嘗試使用AttachedCommandBehavior代碼中發現here它允許你連接一個Command到幾乎所有Event

例如,

<ListView local:CommandBehavior.Event="PreviewMouseDown" 
      local:CommandBehavior.Command="{Binding OpenSOACommand}" /> 
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); 
} 
+0

謝謝,我給這個一去,雖然我不真的想處理在我的代碼事件背後,當我能夠結合我的命令直接在XAML本身... –

+0

我承認,它的醜陋..但你不能改變你的ListView在你的命令可以被處理之前吞下你的點擊事件的行爲。 – Arcturus