2011-03-14 5 views
0

Je dois fournir un raccourci clavier pour plusieurs fonctions telles que Enregistrer. Pour ce faire, j'ai commencé par gérer l'événement KeyUp de mon objet racine qui est une grille appelée LayoutRoot (généralement créée par défaut dans un contrôle ou une commande Silverlight UserControl).Raccourcis clavier Silverlight Access

J'utilise un modèle MVVM mais pour cela, j'ai ajouté du code dans le code sous-jacent en tant que tel (ce qui est l'interaction de l'interface utilisateur il semble donc OK):

 private void LayoutRoot_KeyUp(object sender, KeyEventArgs e) 
     { 
      switch (e.Key) 
      { 
       case Key.S: 
        if ((Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows) 
        { 
         e.Handled = true; 
         // save 

        } 
        break; 

       case Key.C: 
        if ((Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows) 
        { 
         e.Handled = true; 
         // clear fields 

        } 
        break; 

      } 
     } 

Je l'ai utilisé la touche Windows car il y a pas de raccourcis dans le navigateur qui l'utilise autant que je sache.

J'implémente la fonctionnalité Enregistrer sur le bouton Enregistrer à l'aide d'une commande, conservant ainsi le modèle MVVM. Par exemple.

public RelayCommand CommandSavePtr { get; private set; } 
CommandSavePtr = new RelayCommand(OnSavePtr); 
private void OnSavePtr() 
{ 
    .... 

En XAML: -

<Button x:Name="SavePtrButton" 
         Command="{Binding CommandSavePtr}" 
         Style="{StaticResource StandardButtonStyle}" 
         IsEnabled="{Binding Ptr.HasErrors, Converter={StaticResource NotOperatorValueConverter}}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Source="/G4SPrisonerEscorting_ResourceDictionaries;component/images/accept.png" Style="{StaticResource SubPanelIconStyle}"/> 
         <TextBlock Text="Save"/> 
        </StackPanel> 
</Button> 

Mon problème est maintenant que je ne sais pas comment communiquer à la ViewModel de mon événement KeyUp ci-dessus pour la même fonction Enregistrer qui est perfomed en cliquant le bouton Enregistrer.

Quelqu'un pourrait-il me diriger dans la bonne direction.

BTW J'utilise MVVM Light de GalaSoft pour faire le commandement.

Répondre

1

Ceci est une vieille question, mais je pensais que je répondrais de toute façon si quelqu'un d'autre trébuche sur le même problème.

Il devrait être possible de tirer la commande du bouton dans le code-behind de la manière suivante:

SavePtrButton.Command.Execute(SavePtrButton.CommandParameter);