2011-09-02 2 views
0

Existe-t-il un moyen définitif de déterminer à partir de quel View (UserControl) une commande a été appelée? Par exemple, si j'ai deux vues, chacune liée au même ViewModel, comment puis-je déterminer à partir de quelle vue une commande particulière a été appelée? Avoir une commande distincte pour chaque vue ne ferait pas de différence dans ce scénario, car c'est un service externe qui devrait être notifié de la vue active particulière.Déterminer à partir de quel View/UserControl une commande a été appelée

Répondre

1

Je suppose que vous appelez la commande d'un usercontrol. Ainsi, si vous appelez la méthode someMethod par exemple, vous devez alors utiliser cette méthode pour prendre en paramètre un objet UserControl. En d'autres termes, vous devriez avoir quelque chose comme:

Public void someMethod(UserControl u, other params...){ 

    If(u is SomeUsercontrol){ 
     \\do somethin 
     } else if.... 

    } 

Et votre utilisateur conrtoll appeler cette méthode comme:

 someMethod(this, .....) \\ the this keyword will send a UserControl object if you call that method within a UserControl class. In other words it will pass itself as a parameter 
+0

Hm, qui est une excellente idée. Je n'avais pas pensé à passer le UserControl à travers le CommandParameter. Je ne suis pas sûr si cela casse la convention de MVVM (ou quels effets secondaires si pourraient avoir) mais cela vaut vraiment le coup. –

+0

Je passerais un jeton (une chaîne de quelque sorte) dans le paramètre de commande s'il y a des différences basées sur l'endroit où la commande a été invoquée. – aqwert

Questions connexes