2009-10-18 9 views
2

Il y a beaucoup de discussions sur M-V-VM et la liaison de commande (RelayCommand) mais peu de choses ont été couvertes sur les événements routés se liant à un gestionnaire dans un modèle M-V-VM. Je veux trouver quelle est la meilleure approche.WPF Événements MVVM routés

Voici un exemple de liaison RoutedEvent utilisant un événement personnalisé et un gestionnaire d'événements lié à la machine virtuelle.

<Navigation:LeftNavigation x:Name="_leftNav" Margin="3" 
      BindingHelper:EventHelper.RoutedEvent="Events:Customer.SelectionChanged" 
      BindingHelper:EventHelper.EventHandler="{Binding SelectionChanged}" /> 

Dans mon Vm, j'aurais un gestionnaire d'événements similaire à celui-ci.

public void SelectionChanged(object sender, CustomerSelectionChangedArgs e) 
{ 
    // Do something 
} 

Ceci est seulement un concept tiré de nombreux exemples de la commande de liaison. Comment pourrais-je obtenir cela pour les événements routés.

Répondre

2

Vous pouvez vérifier this article que lorsque l'auteur met en œuvre une syntaxe similaire:

<Border Background="Yellow" Width="350" Margin="0,0,10,0" Height="35" CornerRadius="2" x:Name="test"> 
    <local:CommandBehaviorCollection.Behaviors> 
    <local:BehaviorBinding Event="MouseLeftButtonDown" Action="{Binding DoSomething}" CommandParameter="An Action on MouseLeftButtonDown"/> 
    <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/> 
    </local:CommandBehaviorCollection.Behaviors> 
    <TextBlock Text="MouseDown on this border to execute the command"/> 
</Border> 
+0

Merci Jalfp, j'ai essayé moi-même cette technique. Le problème que j'ai trouvé avec cette approche est que la commande/action s'exécute avec seulement les paramètres transmis par CommandParameter, mais qu'en est-il des arguments d'événement provenant de l'événement qui l'a déclenché. Y a-t-il une solution à ce problème ou suis-je tout à fait dans le mauvais chemin? –

+0

Je pense que vous pourriez changer le code de sorte que lorsque vous appelez votre commande, vous donnez en paramètre un Tuple au lieu de donner simplement l'objet CommandParameter – japf

+0

Pourriez-vous me montrer un exemple s'il vous plaît. –

Questions connexes