2012-06-23 3 views
7

Sto provando a lanciare un ICommand quando l'utente fa doppio clic su un elemento casella di riepilogo. Inoltre, sto provando a farlo usando il pattern MVVM.Come attivare un comando sull'elemento di elenco doppio clic su MVVM?

In questo XAML, la pressione del tasto "p" funziona perfettamente. Quando faccio doppio clic sulla casella di riepilogo, il comando non inizia mai. Ho impostato un punto di interruzione per confermare che "PlayVideoCommand" non viene chiamato con un doppio clic. Mi manca qualcosa o devo usare Setter (che non ho familiarità con)?

<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> 

Sia doppio clic e "p" dovrebbe eseguire lo stesso comando. Quando utilizzo il mouse, posso vedere che la lista è selezionata. Ho la sensazione che la proprietà MouseBinding Command non sia una proprietà di dipendenza ma non so come confermare questo.

risposta

10

Che cosa sta succedendo nel vostro esempio è che la casella di riepilogo sta reagendo al doppio clic, ma solo nella parte della sua area che non è coperta da una voce di elenco.

È necessario che il gestore eventi sia collegato alla listboxitem.

Alcuni modi per farlo sono qui: Double Click a ListBox item to open a browser

E qualche discussione sul perché un po 'di code-behind in MVVM non è necessariamente una cosa terribile: Firing a double click event from a WPF ListView item using MVVM

Più discussione: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

+0

Ho visto il secondo link che hai postato, ma speravo che le cose cambiassero da quando è stato pubblicato qualche anno fa. Penso che pubblicherò un paio di righe nel codice dietro al file. Sto facendo fatica ad attaccarmi con MVVM su questo. Grazie per il dettaglio. – James