Как запустить команду для двойного щелчка по элементу списка с помощью MVVM?

Я пытаюсь запустить ICommand, когда пользователь дважды щелкает элемент списка. Кроме того, я пытаюсь сделать это с помощью шаблона 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" должны выполнять одну и ту же команду. При использовании мыши я вижу, что элемент списка выбран. У меня есть подозрение, что свойство MouseBinding Command не является свойством зависимости, но я не знаю, как это подтвердить.


person James    schedule 23.06.2012    source источник


Ответы (2)


В вашем примере происходит то, что сам список реагирует на двойной щелчок, но только в той части его области, которая не покрыта элементом списка.

Вам нужно, чтобы обработчик событий был привязан к элементу списка.

Вот несколько способов сделать это: Дважды щелкните элемент ListBox, чтобы открыть браузер

И некоторое обсуждение того, почему небольшой код программной части в MVVM не обязательно ужасен: Запуск события двойного щелчка из элемента WPF ListView с использованием MVVM

Дополнительное обсуждение: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

person Japple    schedule 23.06.2012
comment
Я видел вторую ссылку, которую вы разместили, но надеялся, что все изменилось с тех пор, как она была опубликована несколько лет назад. Думаю, я собираюсь опубликовать пару строк в коде файла. Мне трудно придерживаться MVVM на этом. Спасибо за подробности. - person James; 24.06.2012

Кажется, что ListBox не обрабатывает двойной щелчок по ListBoxItem. Это хороший ответ: Невозможно привязать Команда для ListBox

person MBen    schedule 23.06.2012