2010-07-13 4 views
0

Je suis en train de transformer un projet WPF de taille moyenne en MVVM et j'ai rencontré un problème que je n'ai pas encore réussi à résoudre. Peut-être pourriez-vous m'aider?Attacher une commande avec un paramètre à l'événement KeyUp

La structure cible est .NET 3.5.1.

J'ai une vue de liste qui récupère ses éléments du modèle de vue sous-jacent. Ce modèle d'affichage expose une commande pour supprimer les éléments sélectionnés de la vue de liste. Par conséquent, le paramètre de commande est lié à la propriété SelectedItems de la vue en liste.

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

Mon intention est d'exécuter cette commande non seulement en appuyant sur un bouton, mais aussi lorsque l'événement KeyUp est tiré sur la vue de la liste et la touche pressée est « supprimer ».

j'étais proche de trouver la solution quand je suis tombé sur l'interaction déclenche dans cet exemple:

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

Maintenant, le problème avec cette démo est que le paramètre de commande est la touche enfoncée, mais dans mon cas J'ai besoin que le paramètre de commande soit la propriété SelectedItems et j'ai besoin que la commande s'exécute uniquement sur une clé spécifique.

Y at-il un moyen de le faire sans beaucoup de frais généraux et de la manière MVVM?

Quelque chose comme ça serait génial:

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

Répondre

1

Si vous ne disposez pas de concepteurs utilisant Blend, passez un appel à une méthode ViewModel dans le gestionnaire d'événement KeyUp ou PreviewKeyUp dans votre code-behind.

+0

Ce n'est pas stricte et cela est certainement une option, mais pour l'instant je veux une séparation stricte. C'est une sorte de preuve de concept et j'essaie d'explorer les types de problèmes que l'on peut rencontrer lors de l'utilisation de MVVM avec une séparation stricte. –

2

Pour ce faire dans la propriété manière MVVM vous devez lier « SelectedItems » de ListView à votre ViewModel, de sorte que vous pouvez l'utiliser à partir de vos commandes et wouldn Pas besoin de le passer via CommandParameter. Dans quelle mesure votre exigence de séparation est-elle rigoureuse?

+0

Je pense que je vais essayer de le faire en utilisant ceci: http://blog.functionalfun.net/2009/02/how-to-databind-to-selecteditems.html –

Questions connexes