2012-06-23 55 views
7

我想在用戶雙擊列表框項目時啓動ICommand。另外,我正在嘗試使用MVVM模式來做到這一點。如何使用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」都應執行相同的命令。當使用鼠標時,我可以看到選擇了listboxitem。我有一個預感,MouseBinding命令屬性不是一個依賴屬性,但我不知道如何確認這一點。

回答

10

您的示例中發生的情況是,列表框本身對雙擊有反應,但只在其列表框項目沒有覆蓋的區域內發生。

您需要將事件處理程序綁定到listboxitem。

一些如何做到這一點的位置: Double Click a ListBox item to open a browser

而且爲什麼一點點的代碼隱藏在MVVM並不一定是一件可怕的事情進行一些討論: Firing a double click event from a WPF ListView item using MVVM

更多討論: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

+0

我看到了您發佈的第二個鏈接,但希望自幾年前發佈以來發生了變化。我想我會在後面的代碼中發佈幾行代碼。我很難在MVVM上使用這個。感謝細節。 – James

相關問題