J'utilise MVVM Light Toolkit pour apprendre le modèle MVVM. Cependant, je n'ai pas été capable de résoudre le problème des commandes usercontrols dans le scénario des contrôles. Par exemple, dans une application Timesheet, disons que nous avons un contrôle appelé NewUnitOfWork. Lors du premier chargement, un panneau avec un ListBox avec une liste de projets est chargé en tant que contenu de NewUnitOfWork. L'utilisateur clique sur un. Un nouveau panneau est remplacé par un ListBox contenant les tâches possibles pour ce projet. Une tâche est sélectionnée et un nouveau panneau est chargé qui contiendra des contrôles pour entrer des données pour la tâche choisie du projet choisi. Par conséquent, l'élément sélectionné dans un contrôle utilisateur est transmis aux deux autres contrôles utilisateur, qui sont à leur tour convertis en tant que contenu du contrôle (ou fenêtre) NewUnitOfWork.ViewModel en tant que membre de ViewModel
Si chaque contrôle a son propre ViewModel, nous devons passer la valeur sélectionnée d'un ViewModel à l'autre, etc.
J'ai fonctionner dans une situation unique utilisateur à l'aide des variables globales (via un « service »). Cependant, il y a des problèmes de concurrence avec cela et ce n'est pas une bonne solution. C'est sous-pair.
J'ai vu plusieurs fois la suggestion sur ce forum d'avoir ViewModel en tant que membre d'un autre ViewModel. Bien que cela résout le problème, je crois que c'est une violation du modèle MVVM. Un autre ViewModel n'est pas une fonctionnalité liée à l'interface utilisateur que le ViewModel doit être directement.
Donc. Est-ce que quelqu'un a trouvé une façon propre à MVVM de faire ce genre de chose?
Vive
Salut LunarFrog. Ma compréhension est que Catel vous permet de faire cela sans avoir ViewModels en tant que membres de ViewModels. J'étais curieux de voir si cela pouvait être fait avec MVVM Light. – onefootswill
En interne Catel conserve toujours une chaîne de ViewModels pour pouvoir transférer les événements. Je pense que vous pouvez l'émuler en introduisant une entité supplémentaire, quelque chose comme Controller, pour gérer vos machines virtuelles. –
OK cool. Merci pour le conseil. J'ai regardé cet épisode de DNRTV http://www.dnrtv.com/default.aspx?showNum=182 dans lequel le présentateur est dans le camp "mauvaise idée". Il utilise un système de messagerie pour transmettre des valeurs entre ViewModels. Je prends tout ce genre de choses en compte. J'imagine que je ne formerai pas vraiment mon propre point de vue tant que je n'aurai pas l'occasion de travailler sur un grand projet (leçons apprises par la douleur). – onefootswill