2010-08-20 14 views
1

Je souhaite obtenir une commande de mon modèle de vue associé à F8, et je ne connais pas grand-chose des gestes d'entrée. Dois-je l'emballer dans une commande routée ou y a-t-il une autre façon recommandée de le faire?Relay/Delegate Command & InputGestures

Cheers,
Berryl

MISE À JOUR

Mon message original avait vraiment deux points de douleur en eux. La première était qu'avant WPF 4, vous ne pouviez pas lier une commande directement à un geste d'entrée ou compter sur l'héritage visuel pour le DataContext de la commande, et vous deviez passer par une couche CommandManager. Cela semble être la raison pour laquelle la commande MVVM Toolkit indiquée par NVM était utile, mais maintenant avec WPF 4 cela est corrigé car la commande est un DP attaché sur InputBinding, donc tout ce que vous devez faire est:

<DataGrid.InputBindings> 
    <KeyBinding Command="{Binding MyViewModel.MyCommand}" Key="F8" /> 
</DataGrid.InputBindings> 

Le deuxième point douloureux à réaliser est que lier un geste d'entrée à une commande n'est pas la même chose que d'associer la représentation textuelle de ce geste à un élément de menu. Donc, je dois faire quelque chose comme:

<MenuItem Header="{x:Static s:Strings.MyHeaderString}" Command="{Binding MyViewModel.MyCommand}" 
    InputGestureText="F8"/> 

J'orthographié ceci dans l'espoir que quelqu'un soit me dire que j'ai quelque chose de mal (ou à droite). En supposant que ce soit le meilleur que vous puissiez faire, alors il s'agit de savoir combien DRYness vous pouvez obtenir et comment le faire tout en gardant les éléments strictement visuels hors de vos ViewModels. Vous pouvez le faire soit en ayant des propriétés sur votre commande (c'est-à-dire, KeyGesture, KeyModifier) ​​ou avoir le "F8" dans un fichier de ressources je suppose, en fonction de combien vous avez besoin de réutiliser quelque chose et votre point de vue. Aussi sur combien de gestes d'entrée vous avez pour la commande!

Répondre

3

How do I associate a keypress with a DelegateCommand in Composite WPF?

Ceci est votre réponse. Au lieu de Key = "X" vous devez utiliser Gesture = "F8"

+0

Merci pour la réponse. Je n'utilise pas MVVM toolkit mais je vais voir comment ça fonctionne. Il semble également que WPF 4 évite d'avoir à faire son propre Freezable comme décrit [ici] (http://blogs.msdn.com/b/llobo/archive/2009/10/29/new-wpf-features-key- gesture-binding.aspx? wa = wsignin1.0) mais j'ai besoin de digérer un peu plus. Je ne m'attendais pas à passer beaucoup de temps à trouver comment faire fonctionner la touche F8 sur une commande, mais peut-être que ça en vaut la peine. Bravo – Berryl

+0

Vous n'avez pas vraiment besoin de la boîte à outils. CommandReference est une classe très simple. Vous pouvez simplement ajouter la classe à votre projet et être sur votre chemin joyeux. Cela dit, je préfère utiliser WPF intégré dans les choses moi-même. – NVM

+0

Je finis par créer une classe qui ajoute à la fois InputGestureText et GestureKey (et quelques autres propriétés) à mes commandes, donc je peux lier le premier dans un menuItem et le dernier dans un KeyBinding. J'ai appelé la classe CommandReference, donc les accessoires pour vous. À votre santé – Berryl