2010-11-15 6 views
10

J'ai une application WPF qui suit le modèle MVVM. J'ai besoin de mettre en place des raccourcis clavier. Ces raccourcis doivent contrôler le comportement du contrôle WebBrowser. J'ai défini la première commande personnalisée et ajouté aux liens d'entrée de la vue. Il y aura beaucoup plus de commandes et ils doivent invoquer des scripts sur le navigateur:Raccourcis clavier dans WPF MVVM?

MainWindow.xaml.cs:

 ... 

     CommandBinding cb = new CommandBinding(RemoteControlCommands.TestCommand, MyCommandExecuted, MyCommandCanExecute); 
     this.CommandBindings.Add(cb); 

     KeyGesture kg = new KeyGesture(Key.Q, ModifierKeys.Control); 
     InputBinding ib = new InputBinding(RemoteControlCommands.TestCommand, kg); 
     this.InputBindings.Add(ib); 
    } 

    private void MyCommandExecuted(object sender, ExecutedRoutedEventArgs e) 
    { 
     webBrowser.InvokeScript("foo", "Hello World!"); 
    } 

    private void MyCommandCanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

Ma question est de savoir comment adapter cela en MVVM Patern? MVVM est un nouveau concept pour moi, mais je comprends comment lier la commande view pour afficher le modèle et y exécuter des méthodes ou changer les propriétés. Cependant ce dont j'ai besoin dans ce cas est d'exécuter une méthode sur un contrôle dans la vue. Quel est le meilleur endroit pour gérer les raccourcis dans ce scénario?

Répondre

38
<Window.InputBindings> 
    <KeyBinding Command="{Binding MyCommand, Source=viewModel...}" 
       CommandParameter="{Binding,ElementName=browserControl,Mode=Self}" 
       Gesture="CTRL+R" /> 
</Window.InputBindings> 

Vous pouvez lier la propriété de commande à la commande Afficher le modèle.

+0

et ensuite? Voir le modèle ne sait pas sur le contrôle webbrowser dans la vue que je veux invoquer la méthode sur – jlp

+0

Vous pouvez lier le paramètre de commande à une valeur comme webbrowser lui-même et le récupérer dans votre méthode de délégué. –

+1

+1, construction de la langue très agréable, havent rencontré avant –

Questions connexes