Question

J'ai une classe ViewModel à laquelle je souhaite répondre à la commande d'actualisation intégrée qui est déclenchée par un bouton, mais je ne suis pas sûre de savoir comment déclarer l'objet CommandTarget.

Brièvement, mon code est comme ci-dessous

Le constructeur ViewModel et les gestionnaires d'événements CanExecute et Executed -

    public ViewModel()
    {
        CommandBinding binding = new CommandBinding(NavigationCommands.Refresh, CommandHandler);
        binding.CanExecute += new CanExecuteRoutedEventHandler(binding_CanExecute);
        binding.Executed += new ExecutedRoutedEventHandler(binding_Executed);
        CommandManager.RegisterClassCommandBinding(typeof(ViewModel), binding);
    }
    void binding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        Debug.Print("Refreshing...");
    }

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

Le balisage est -

<Button Command="Refresh">refresh</Button>

Maintenant, j'ai essayé de définir le CommandTarget sur ce bouton sur {Binding Source = {StaticResource ViewModel}} , mais le code d'exécution indiquant que ne peut pas convertir la valeur dans l'attribut 'CommandTarget' en objet de type 'System.Windows.IInputElement' .

Je suis nouveau dans les commandes donc il est tout à fait possible que je me trompe ici. Toute aide serait appréciée.

Était-ce utile?

La solution

RoutedCommand et MVVM ne se mélangent pas. Les RoutedCommand sont liés à l'arborescence visuelle et dépendent de la collection CommandBindings de WPF. Vous devez implémenter vos propres classes ICommand qui fonctionnent avec le modèle MVVM. Consultez les implémentations de Prism pour commencer.

Dans mes propres projets MVVM, j'ai quelques implémentations de commandes:

  • DelegateCommand . Les appels fournis permettent aux délégués de déterminer si la commande peut être exécutée et d'exécuter la commande.
  • ActiveAwareCommand . Fonctionne en conjonction avec une interface ( IActiveAware ) et envoie les exécutions de commandes à l'élément actuellement actif. Plusieurs implémentations conscientes actives s'enregistrent elles-mêmes avec la commande, qui achemine automatiquement les appels CanExecute / à l'exécution vers l'élément actuellement actif.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top