Присоединить команду с параметром к событию KeyUp - PullRequest
0 голосов
/ 13 июля 2010

В настоящее время я преобразовываю проект WPF среднего размера в MVVM и столкнулся с проблемой, которую пока не смог решить.Может быть, вы могли бы помочь мне?

Целевой фреймворк .NET 3.5.1.

У меня есть представление списка, которое получает свои элементы из базовой модели представления.Эта модель представления предоставляет команду для удаления выбранных элементов из списка.Поэтому параметр команды связан со свойством SelectedItems представления списка.

<ListView ItemsSource="{Binding MyItems}"
          x:Name="MyListView"
          SelectionMode="Extended">
</ListView>
<Button x:Name="MyRemoveButton" 
        Content="Remove item" 
        Command="{Binding RemoveItemCommand}"
        CommandParameter="{Binding ElementName=MyListView, Path=SelectedItems}">

Мое намерение состоит в том, чтобы выполнить эту команду не только при нажатии кнопки, но также и при возникновении события KeyUp в представлении списка.и нажатая клавиша «удалить».

Я был близок к поиску решения, когда наткнулся на триггеры взаимодействия в этом примере:

http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html?showComment=1250325648481#c3867495357686026904

Теперь проблемас этой демонстрацией то, что параметром команды является нажатая клавиша, но в моем случае мне нужно, чтобы параметром команды было свойство SelectedItems, и мне нужно, чтобы команда выполнялась только для определенной клавиши.

Есть ли способ сделать это без особых накладных расходов и с помощью MVVM?

Что-то вроде этого было бы замечательно:

<i:Interaction.Triggers>
   <i:EventTrigger EventName="KeyUp">
      <local:CommandAction Command="{Binding RemoveItemCommand}"
                           CommandParameter={Binding ElementName=MyListView, Path=SelectedItems}
                           EventArgument="Key.Delete"/>
   </i:EventTrigger>
</i:Interaction.Triggers>

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Чтобы сделать это способом MVVM, вам необходимо привязать свойство «SelectedItems» ListView к вашей ViewModel, чтобы вы могли использовать его из своих команд и не нужно было передавать его через CommandParameter.

1 голос
/ 14 июля 2010

Насколько строгое ваше требование о разделении?Если у вас нет дизайнеров, использующих Blend, поместите вызов метода ViewModel в обработчик событий KeyUp или PreviewKeyUp в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...