WPF MVVM - Commande de liaison à l'intérieur d'un ItemsControl
Je suis en train de convertir un petit projet WPF à MVVM. J'ai un List<CustomObject>
dans le ViewModel de la fenêtre principale que mon ItemsControl se lie et utilise un DataTemplate pour créer l'INTERFACE utilisateur de chaque élément. Mon ancien code utilisé un gestionnaire d'événement à l'intérieur de la DataTemplate pour gérer un événement de clic. Je veux utiliser une sorte de liaison de commande pour éliminer mon code-behind de gestionnaires d'événements, mais le DataContext de mon ItemsControl est le modèle d'objet donc je ne peux pas actuellement de se lier à un ICommand à partir de ce Dernier.
Donc, je suppose qu'il ya un couple de façons d'attaquer et je ne suis pas sûr de ce qui serait le plus "MVVM" façon de faire. Puis-je lier le ItemsControl.ItemsSource à une collection d'une nouvelle classe ViewModel qui représente chaque élément? Ou dois-je utiliser les contrôles utilisateur au lieu d'un DataTemplate et puis je peux lier chaque UserControl à sa propre instance d'un ViewModel qui la représente? Ou est-il une sorte d'expression de liaison que je peux utiliser pour renvoyer au DataContext de la fenêtre pour avoir accès à lier le ViewModel (que je tape ce que, il semble juste mauvais, donc je suis en supposant un gros "NON" à cette idée)?
Aussi, ce que je veux lier mon commandement, c'est la LeftMouseButtonUp cas d'une Grille de contrôle. Il n'y a pas de "Commande" pour une Grille, j'ai été de tenter de l'utiliser InputBindings. Je pourrais utiliser un statique de la commande (comme celui de la construction dans le ApplicationCommands), mais je ne pouvais pas utiliser une expression de liaison pour lier à un ICommand instance qui est une propriété du ViewModel parce que MouseBinding.La commande n'est pas une DependencyProperty.
Je suis assez confus sur le sujet de la gestion des événements, MVVM, et que tous les info est apprécié.
source d'informationauteur Rich
Vous devez vous connecter pour publier un commentaire.
Si vous créez un CustomObjectViewModel à l'hôte de la commande ou de placer la commande dans le même ViewModel qui a la liste dépend vraiment de la fonction de l'action de se produire. Est-ce quelque chose qui appartient avec le CustomObject, ou est-ce quelque chose qui appartient à votre ViewModel?
Ce n'est pas aussi mauvais que cela puisse paraître. Vous n'avez pas vraiment besoin de le DataContext de la Fenêtre, juste le DataContext de avant de est passé sur les éléments individuels. Donc, si votre commande a été sur la même ViewModel qui héberge la Liste de CustomObjects, vous pouvez lier à partir de l'une des CustomObject du DataTemplate en utilisant une de ces méthodes:
Pour cela, je voudrais utiliser quelque chose comme Joint De Commande Comportements qui vous permettra d'attacher un ICommand à tout événement.
Josh Smith a écrit un excellent article de MSDN ici où il parle de la liaison de commande.
Dans votre cas, il se résume à ceci:
HTH.
Vous pouvez essayez de garder votre Commande dans votre Modèle.
Et puis, vous devez avoir une ObservableList pour la liste de vos Articles dans votre ViewModel,
Ensuite dans le code XAML, vous devez dire;