2010-11-15 22 views
10

Tengo la aplicación WPF que sigue el patrón MVVM. Necesito implementar atajos de teclado. Estos atajos tienen que controlar el comportamiento del control WebBrowser. Definí el primer comando personalizado y lo agregué a los enlaces de entrada de la vista. Habrá mucho más comandos y que tendrían que invocar los scripts en el navegador:Atajos de teclado en 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; 
    } 

Mi pregunta es cómo encajar esto en MVVM patern? MVVM es un nuevo concepto para mí, pero entiendo cómo vincular el comando de view para ver el modelo y allí ejecutar métodos o cambiar propiedades. Sin embargo, lo que necesito en este caso es ejecutar un método en un control en la vista. ¿Cuál es el mejor lugar para manejar atajos en este escenario?

Respuesta

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

Puede enlazar propiedad de comando para ver el comando del modelo.

+0

y luego? ver el modelo no sabe sobre el control webbrowser en vista de que quiero invocar el método en – jlp

+0

Puede vincular el parámetro del comando a algún valor como webbrowser y recuperarlo en su método de delegado. –

+1

+1, construcción de lenguaje muy agradable, no se han encontrado antes de –