2010-06-21 3 views
2

J'ai une vue qui permet à l'utilisateur de sélectionner certaines données: certaines dates par exemple, et exécute une commande qui a besoin de ces données.Où et comment les éléments sélectionnés doivent-ils être gérés dans une architecture MVVM?

Alors dans ma commande, je devrais avoir une référence à la date choisie, mais quelle est la meilleure pratique pour faire de cette date aller du côté ViewModel où la vie de commande:

  • pour ajouter une propriété de dépendance SelectedDate dans le ViewModel et lier ma vue dessus, et le référencer dans ma commande via "@ this.SelectedDate" (avec @this une référence au ViewModel actuel),
  • pour laisser la vue la transmettre par le "paramètre" de la méthode "Execute" de la commande, et référence la date avec "DateTime selectedDate = (DateTime) paramètre;",
  • a ny autre solution ...

Merci d'avance.

Répondre

3

Je ferais SelectedDate une propriété de dépendance du modèle de vue, absolument.

Je voudrais également faire la commande obtenir le SelectedDate à partir du modèle de vue. Il n'y a aucune raison pour que l'on sache quoi que ce soit à ce sujet.

+0

Merci pour votre contribution. Il semble définitivement que la solution DP est la meilleure. – Pragmateek

1

À la première partie, Oui, je pense que le SelectedDate devrait être une propriété (INotify) de votre ViewModel.

Je n'ai pas une forte opinion sur où votre commande devrait obtenir cette information, je pense que la propriété est OK.

+0

Merci de votre participation. Pour moi, le principal avantage de l'approche DP est la simplicité: la vue remplit simplement les DP et la commande a un accès direct à ses données. Avec la deuxième approche, la vue doit "sérialiser" les données pour vérifier l'état de la commande et exécuter la commande, et la commande doit "désérialiser" les données de son côté. – Pragmateek

1

L'exemple d'application BookLibrary du WPF Application Framework (WAF) montre un moyen de gérer l'élément sélectionné avec MVVM: Le ViewModel a une propriété « SelectedBook » qui est lié à la vue.

+0

Merci pour cette entrée intéressante qui confirme les affirmations ci-dessus. – Pragmateek

Questions connexes