2010-05-28 3 views
13

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

11

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

+0

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

+0

Difficile à dire pour moi sans connaître plus de détails. Mais j'ai ajouté dans certains liens à des informations connexes – ThomasAndersson

+0

@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

Questions connexes