2017-08-17 7 views
0

je le scénario suivant:une liaison ICommand à un MenuItem et attribuer un raccourci

A ViewModel avec plusieurs propriétés ICommand (RelayCommand). Ces propriétés sont liées aux menuitems dans la vue. Certains des menuitems devraient avoir un raccourci clavier. Pour ce faire, j'ai essayé d'utiliser InputBindings de la fenêtre. Cela fonctionne - mais je dois assigner l'InputGestureText manuellement au MenuItem. Donc je suppose que Theres une meilleure façon de lier un ICommand à un MenuItem et assigner un raccourci ...

// ViewModel 
class MyViewModel: ViewModelBase { 
    public ICommand TestCommand {get; set;} 
} 

// View 
<Window...> 

    <Window.InputBindings> 
     <KeyBinding Command="{Binding TestCommand}" Key="R" Modifiers="Control" /> 
    </Window.InputBindings> 

    // ... 
    <MenuItem Name="MenuItemTest" Command="{Binding TestCommand}" 
       Header="Test" InputGestureText="Ctrl + R" /> 

</Window> 

Répondre

2

La propriété InputGestureText est juste utilisé pour définir un texte qui décrit un geste d'entrée qui appellera la commande associé à la commande.

Il ne pas associer le geste d'entrée avec l'élément de menu en quelque sorte; il ajoute simplement du texte à l'élément de menu. Cela est documenté sur MSDN: https://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.inputgesturetext(v=vs.110).aspx.

Donc non, il n'y a pas de meilleure façon de faire ce que vous faites :)

+0

Ceci est l'un des moments que je veux revenir à WinForms:/ – Michael

+0

Pourquoi? Depuis l'attribution d'un raccourci vers un MenuItem dans WinForms affiche le raccourci attribué - et je n'ai pas à attribuer un texte :) Et à propos de l'upvote manquant: S'il vous plaît ne vous méprenez pas, vous avez répondu à ma question et j'ai accepté votre réponse. Mais vous venez de confirmer que je fais les choses correctement et qu'il n'y a pas d'autre moyen, alors vous n'avez pas fourni de «solution» à mon problème. Mais je voterai votre réponse ... – Michael