2012-06-23 10 views
7

Estoy tratando de iniciar un ICommand cuando el usuario hace doble clic en un elemento de la lista. Además, estoy tratando de hacer esto usando el patrón MVVM.¿Cómo disparar un comando al hacer doble clic en el elemento de la lista usando MVVM?

En este XAML, la tecla presionar "p" funciona perfectamente. Cuando hago doble clic en el cuadro de lista, el comando nunca comienza. Establecí un punto de interrupción para confirmar que no se llama "PlayVideoCommand" con un doble clic. ¿Me estoy perdiendo algo o tengo que usar Setter (con el que no estoy familiarizado)?

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

Ambos doble clic y "p" deben ejecutar el mismo comando. Cuando uso el mouse, puedo ver que el cuadro de lista está seleccionado. Tengo la corazonada de que la propiedad Comando MouseBinding no es una propiedad de dependencia, pero no sé cómo confirmar esto.

Respuesta

10

Lo que está sucediendo en su muestra es que el cuadro de lista está reaccionando al doble clic, pero solo en la parte de su área que no está cubierta por un elemento del cuadro de lista.

Necesita que el controlador de eventos esté vinculado al listboxitem.

Algunas formas de hacerlo son aquí: Double Click a ListBox item to open a browser

Y cierta discusión acerca de por qué un poco de código subyacente en MVVM no es necesariamente una cosa terrible: Firing a double click event from a WPF ListView item using MVVM

Más discusión: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

+0

Vi el segundo enlace que publicaste, pero esperaba que las cosas hayan cambiado desde que se publicó hace unos años. Creo que voy a publicar un par de líneas en el código detrás del archivo. Estoy teniendo dificultades para seguir con MVVM en este caso. Gracias por los detalles. – James

Cuestiones relacionadas