Je construis une application WPF en utilisant le modèle MVVM (les deux sont de nouvelles technologies pour moi). J'utilise des contrôles utilisateur pour des bits simples de fonctionnalité réutilisable qui ne contiennent pas de logique métier et un modèle MVVM pour générer une logique d'application. Supposons qu'une vue contienne mon contrôle utilisateur qui déclenche des événements et que je souhaite ajouter un gestionnaire d'événements à cet événement. Ce gestionnaire d'événements doit être dans le modèle de vue de la vue, car il contient une logique métier. La question est - vue et le modèle de vue sont connectés uniquement par liaison; comment connecter un gestionnaire d'événements à l'aide de la liaison? Est-ce même possible (je ne le soupçonne pas)? Si non - comment dois-je gérer les événements d'un contrôle dans le modèle de vue? Peut-être que je devrais utiliser des commandes ou INotifyPropertyChanged?WPF - Gestion des événements à partir du contrôle utilisateur dans Afficher le modèle
Répondre
D'une manière générale, c'est une bonne pratique MVVM d'éviter le code dans le code, comme ce serait le cas si vous utilisez des événements dans vos contrôles utilisateur. Donc, si possible, utilisez INotifyPropertyChanged
et ICommand
. Cela dit, en fonction de votre projet et de votre pragmatisme, il est parfois plus logique d'utiliser le code du contrôle.
je à quelques reprises utilisé quelque chose comme ceci:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Vous pouvez également envisager Attached Command Behaviour, plus d'informations à ce sujet et les mises en œuvre pour trouver ici:
Firing a double click event from a WPF ListView item using MVVM
Prenez également un Examinez la question How Can I Add a New Command to a Control's Event
En utilisant ICommand dans MVVM avec XAML.
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM aurait dû être acronym'd comme VVMM:, Vue modèle, modèle, semble également mieux :))
- 1. Gestion des événements du contrôle utilisateur contenant une zone de texte WPF
- 2. Ajout d'un contrôle utilisateur WPF à partir du code
- 3. WPF et Powershell - Gestion des événements
- 4. WPF: Obtenir Tabtitle à partir du contenu (dans le modèle)
- 5. Traitement des événements déclaratifs à partir du contrôle utilisateur ASP.NET à la page
- 6. Gestion des événements dans le contrôle d'utilisateur dynamique d'asp.net
- 7. Gestion des événements pour le contrôle ActiveX créé dynamiquement
- 8. Asp.Net Contrôle des événements utilisateur Wireup à partir du fichier aspx
- 9. Événements de contrôle utilisateur
- 10. Gestion des événements de touche sur le contrôle WebBrowser
- 11. rails utilisateur-ip à partir du modèle?
- 12. Gestion des événements Silverlight
- 13. Contrôle utilisateur WPF parent
- 14. Docs/utilitaire pour afficher le modèle de contrôle WPF?
- 15. Contrôle utilisateur WPF en tant que modèle d'élément
- 16. Contrôle utilisateur wpf
- 17. WPF - Contrôle utilisateur animé
- 18. WPF Lier les coordonnées du contrôle utilisateur
- 19. Android: Gestion des événements dans le menu
- 20. Liaison de données WPF - Lier au contrôle d'interface utilisateur à partir d'un modèle
- 21. WPF: Gestion des événements de bulles uniquement à partir d'un contenu spécifique
- 22. DataContext du contrôle utilisateur WPF est nul
- 23. Obtention d'une entrée utilisateur à partir du calque du modèle
- 24. Gestion des événements dans SPWebPartManager
- 25. Afficher des caractères spéciaux (non imprimables) dans le contrôle WPF
- 26. Gestion des événements dans wxPython
- 27. Accéder au modèle WPF pour le contrôle personnalisé à partir du code derrière
- 28. Le contrôle utilisateur hérite du contrôle personnalisé
- 29. Gestion des événements dans ASP.net
- 30. Gestion des événements de l'interface utilisateur avec mGLSurfaceView
contrôle doit être réutilisable, de sorte que le code ne sera pas le faire - il lie le contrôle à un modèle de vue spécifique. Commandes ... Probablement pas - ils sont plus pour les actions de l'utilisateur. INotifyPropertyChanged alors? Merci :) – Vitaly
Difficile à dire pour moi sans connaître plus de détails. Mais j'ai ajouté dans certains liens à des informations connexes – ThomasAndersson
@Vitaly si vous êtes inquiet de lier la vue à la ViewModel explicite, vous pouvez envelopper le ViewModel dans une interface. Je regarderais dans les comportements de commandement attachés, ils deviennent la pratique acceptée. Aussi, vérifiez MVVMLight ou Caliburn comme un cadre pour aider votre travail MVVM, il vous rendra la vie beaucoup plus facile. – Agies