Выполнение команды при двойном щелчке ListView. (WPF - MVVM) - PullRequest
2 голосов
/ 09 августа 2011

У меня возникают трудности с привязкой команды (ICommand) к MouseBinding объекта ListView. Я использовал этот фрагмент кода XAML для проверки различных жестов мыши:

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Событие по умолчанию Click для ListView помечает событие как обработанное.Попробуйте использовать PreviewLeftClick и PreviewLeftDoubleClick вместо

EDIT

Поскольку MouseBindings не содержит PreviewLeftClick или PreviewLeftDoubleClick, попробуйте использовать найденный код AttachedCommandBehavior здесь , который позволяет вам прикрепить Command к любому Event

Например,

<ListView local:CommandBehavior.Event="PreviewMouseDown" 
          local:CommandBehavior.Command="{Binding OpenSOACommand}" />
1 голос
/ 09 августа 2011

Это потому, что ваши ListViewItems вашего ListView поглотят ваши события 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...