2009-09-08 6 views
2

Je me demande comment appliquer MVVM correctement dans le scénario suivant: Supposons que j'ai des données simples de type maître-détail, comme une personne avec des adresses 0-n. Les adresses doivent être affichées dans un ListBox et l'utilisateur doit pouvoir déclencher des actions certian pour chaque adresse. Donc, ce que j'ai fait est de créer une machine virtuelle qui renvoie le modèle de personne et les modèles d'adresses. Le problème est alors, que je veux créer des boutons dans l'adresse DataTemplate. Mais pour que les boutons fonctionnent, j'ai besoin d'une commande exposée par chaque adresse, qui peut être liée à la propriété appropriée sur le bouton.Comment appliquer MVVM pour ce scénario

Ma question est, si c'est vraiment la bonne approche pour envelopper (dans ce cas) chaque adresse dans un autre objet qui expose les fonctionnalités nécessaires? Je voudrais éviter que je doive maintenir une deuxième liste d'adresses voir des modèles, en fonction des changements de la première liste avec les objets du modèle.

tia Martin

Répondre

2

Cela ressemble à l'approche correcte.

Il est toujours très tentant de lier directement l'interface utilisateur à une classe de modèle de domaine, mais l'expérience montre que vous pouvez aussi toujours faire glisser un ViewModel entre l'interface utilisateur et le modèle de domaine. Cela garantit que les membres spécifiques à l'interface utilisateur (tels que les propriétés ICommand que vous mentionnez) restent dans l'interface utilisateur et n'invitent pas le modèle de domaine.

Dans certains cas, il peut sembler que le modèle de domaine soit presque, ou même qu'il s'adapte totalement à l'interface utilisateur voulue. Dans ces cas, il est très difficile de résister à l'envie de lier directement le modèle de domaine directement à la vue.

Cependant, il est très probable que les exigences spécifiques à View puissent apparaître plus tard, et vous devez alors introduire un ViewModel à ce moment-là - et ce sera souvent un moment où vous n'avez pas vraiment le temps de le faire.

Cela rend également l'architecture de votre application plus facile à comprendre si vous pouvez simplement dire: "Tous les objets de domaine sont enveloppés dans un ViewModel qui est ensuite lié aux vues."

+0

+1. La liaison directe aux modèles peut sembler plus facile au début, mais finalement vous finissez presque toujours par avoir besoin de quelque chose que le modèle ne peut pas fournir (généralement des commandes) –

Questions connexes