J'expérimente MVVM et je n'arrive pas à m'en rendre compte.Recommandez la meilleure approche dans cette situation
J'ai une vue (windows) qui a plusieurs contrôles répétés.
Disons que j'ai 4 paires de boutons de texte. Leur comportement devrait être le même, après avoir appuyé sur un bouton apparié zone de texte dit "Bonjour tout le monde!"
J'ai essayé plusieurs options que je pouvais penser:
- un ViewModel, 4 propriétés de chaîne binded à textboxes, 1 commande
- Quand je lie chaque bouton à la même commande je ne peux pas Indique quelle propriété doit être définie.
- La transmission d'une commande à CommandParameter est gênante.
- Un ViewModel et UserControl qui héberge une zone de texte et un bouton répété 4 fois.
- Maintenant, j'ai besoin d'exposer toutes les propriétés comme Command, CommandParameter, Text, etc .. On dirait que beaucoup de travail.
- Impossible de dire quelle propriété doit être mise à jour après un clic.
- Chaque UserControl a une ViewModel
- Cela résout en cliquant le bouton et réglage de la propriété, mais maintenant je n'ai pas la moindre idée comment extraire des textes de ViewModels imbriqués dans la fenêtre ViewModel.
est-il un autre moyen? Je pense que DataTemplates pourrait être utile, mais je ne sais pas comment.
+1 pour la réponse bien présentée. Mais je ne pense pas que l'affirmation de créer une classe ViewModel pour représenter un élément de modèle est vraie. Au lieu de cela, la classe ViewModel est créée en fonction de la vue et de la vue uniquement. Si la vue requiert des données de modèle, la propriété particulière dans le modèle est utilisée par ViewModel pour répondre aux besoins de la vue. Ainsi, le premier ViewModel pourrait contenir le texte de la zone de texte (à partir de Model si nécessaire) et l'Icommand et le second pourrait contenir le 'Collection' –
Amsakanna
Merci pour le commentaire, mais je suggérais que vous ne démarreriez jamais l'application * (pas le ViewModel) avec une vue; vous n'écririez jamais une application 'pour mettre du texte dans des boîtes', vous l'écririez pour un but réel avec des entités réelles. Donc, vous avez besoin d'un modèle pour commencer. Je crois que ma réponse dit déjà que la première classe contiendrait une propriété pour le texte et une commande, et la seconde serait aussi une collection. –
Vous avez raison, j'ai eu la mauvaise approche ici. Je le vois maintenant. Mais je suis d'accord que ViewModels doit être créé en fonction de la vue et non du modèle. Quoi qu'il en soit dans mon cas je n'ai pas de collection c'est un nombre fixe de contrôles répétés qui devraient représenter un nombre fixe de chaînes dans mon modèle. – Kugel