WPF et MVVM. Les Événements De Liaison
Je suis le développement d'une application WPF avec le pattern MVVM, RelayCommand, etc.
J'ai beaucoup lu sur cette question, mais je suis pas claire:
Tout ce que je veux faire est de déplacer une forme, comme une ellipse, par exemple, de capture et de sa position finale, à mettre dans la base de données.
Mais je ne peux pas lier les événements (MouseLetButtonDown, MouseLeftButtonUp et MouseMove) aux commandes. J'ai lu sur joint comportements , mais j'ai besoin des arguments des événements (MouseButtonEventArgs et MouseEventArgs) pour récupérer la position.
Solution?
OriginalL'auteur Dani O. | 2011-01-24
Vous devez vous connecter pour publier un commentaire.
Lors de la rédaction de MVVM application graphique, il est tentant d'essayer d'envoyer tous les événements dont vous avez besoin à la vue-modèle. Mais le traitement de la vue spécifique événement de souris args dans une commande est contraire à MVVM principes et le but de perdre du couplage.
La façon de résoudre ce problème est l'abstraction de l'opération dans une tâche que la vue peut effectuer et ensuite de communiquer ses résultats à la vue-modèle via des opérations et des données. Si vous souhaitez effectuer une petite quantité de code dans le code-behind pour ce faire, le MVVM la police ne viendra pas et de prendre vos enfants. Mais une meilleure façon de le faire est d'ajouter de l'interactivité à l'aide de comportements. Les comportements sont ré-utilisables morceaux de fonctionnalité sans code-behind qui fonctionnent bien avec le pattern MVVM et les applications qui ont besoin d'interactivité qui serait autrement nécessaire d'ajouter des gestionnaires d'événements pour votre XAML.
Voir ma réponse ici pour un exemple complet d'un comportement qui utilise les événements de la souris pour déplacer les objets graphiques:
Avec votre interactivité effectuée par la vue, la vue-modèle peut s'en tenir à des données et des commandes.
OriginalL'auteur Rick Sladkey
Cela fonctionne pour Silverlight donc, il faut travailler sur WPF (ou au moins, il devrait avec des modifications mineures)
OriginalL'auteur paxx
Vous pouvez trouver XCommand open source codeplex wpf extension du projet ici, xcommand.codeplex.com, cela vous permet de lier Commande et CommandParameter de tous les événements comme MouseMove, MouseLeftButtonDown à aucun des éléments de l'INTERFACE qui hérite de WPF UIElement.
Vous pouvez trouver de magasin de windows 8 windows et les applications de bureau version de l'application des bibliothèques de classe ici. Vous souhaitez WPFXCommand qui traite avec WPF application de bureau.
Ici, la façon dont il fonctionne.
Ajouter WPFXCommand.dll comme référence à votre désir projet.
Ajouter l'espace de noms sur votre fichier xaml comme ci-dessous:
Maintenant, vous pouvez lier Commande et CommandParameter à tous les événements disponibles sur tous les éléments de l'INTERFACE utilisateur hériter de WPF UIElement comme ci-dessous:
Espère que cela va vous aider à vous débarrasser de l'événement en fonction du code derrière.
OriginalL'auteur XdevPro