2009-10-08 7 views
1

J'ai donc rencontré ce problème en essayant de mettre en œuvre MVVM. AFAIK la meilleure façon d'exécuter une méthode dans la classe ViewModel est à travers un CommandBinding.Une bonne approche des événements dans MVVM

<Button Command={Binding DoSomethingCommand} /> 

Seulement cette fois je dois faire quelque chose sur un double-clic ListBoxItem et la ListBoxItem ne met pas ICommandSource. Je me demande donc quelle est la meilleure approche pour le faire, s'il y en a une.

Merci!

Edit:

Je viens de penser à un moyen, mais il semble plutôt aki. Que faire si j'expose l'événement ListBox.DoubleClick et que ma classe ViewModel s'y abonne et exécute la méthode correcte lorsque le DoubleClick est déclenché?

Répondre

0

Silverlight ne contient pas un bouton de commande comme le bouton dans WPF. La façon de contourner le problème consiste à créer un contrôle personnalisé contenant une commande et à mapper cet événement à la commande. Quelque chose comme ça devrait fonctionner. Ensuite, lorsque vous créez vos ListBoxItems, vous liez à la nouvelle propriété de commande.

<local:CommandListBoxItem DoubleClickCommand="{Binding ItemDoubleClickedCommand}" /> 
5

Vous pouvez gérer l'événement dans le fichier code-behind et appeler la méthode sur l'objet ViewModel. À mon avis, c'est beaucoup mieux que de commencer à pirater. :-) Je ne transmettrai pas un événement routé WPF à un objet ViewModel.

Qui dit que le code-behind est interdit? Le modèle Model-View-ViewModel certainement pas.

Questions connexes