MVVM : comment passer des paramètres au constructeur du ViewModel
Je suis en utilisant L. Bugnion de MVVM Light Cadre.
Quelles sont certaines des approches recommandées pour passer des paramètres tels que le code Client à ViewModel du constructeur?
Edit:
Le paramètre dont j'ai besoin pour chaque ViewModel est pas quelque chose qui est partagé à tous les modèles. c'est quelque chose d'unique à chaque viewmodel instance.
OriginalL'auteur Yeonho | 2010-11-08
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Jgraham
Demande ce que vous voulez, par injection, l'utilisation d'interfaces.
Si vous avez des paramètres partagés entre les modèles, instancier un singleton contenant les valeurs et les exposer via ISomethingProvider et ISomethingEditor interfaces.
OriginalL'auteur Gone Coding
Pour moi le point de l'ensemble de l'aide de MVVM Light est pour éviter d'injecter quoi que ce soit dans le constructeur d'un Modèle de Vue. MVVM Light offre une Messagerie qui vous permettra d'envoyer vos paramètres d'un écouteur à l'intérieur de du Modèle de Vue.
Par exemple, c'est mon point de Vue, le Modèle de mon WordWalkingStick projet à l'aide de VSTO et WPF:
Vous pouvez voir que MVVM Light est de messagerie (pas d'injection) les valeurs dans le constructeur (
Messenger.Default.Register
) avec sesMessenger
.Je ne suis pas sûr que votre scénario précis peuvent être abordés. Il ressemble messagerie interne à entraînement fonctionnalités dans le Modèle de Vue qui peut être l'ID du client conduit. Il me semble que la messagerie n'a pas à être au courant d'un cas particulier, mais le code, le message peut faire.
Vous devriez être en mesure de faire de l'instance spécifique de messagerie à l'aide de jetons, mais personnellement, je recommanderais de l'injection de paramètres à la place.
OriginalL'auteur rasx
Voici ce que je fais:
ViewModel doit faire preuve d'une fenêtre de la voiture avec la voiture de l'id passé en paramètre:
ViewModel -> message pour le code-behind de la vue de la fenêtre ouverte. Message envoie id.
Essentiellement dans le code behind:
var vm = new viewmodel(id);
var affichage = new();
vue.datacontext = vm;
vue.show();
mon viewmodel a un constructeur qui prend un id.
OriginalL'auteur dnndeveloper
Dans le cas de l'écriture de tests contre le viewmodel je crée parfois une surcharge du viewmodel constructeur qui prend un ISomething en tant que paramètre. J'ai le constructeur par défaut appelez le deuxième avec un défaut de mise en œuvre de ISomething. Dans le cas de l'essai que j'appelle le constructeur avec un test de mise en œuvre. Je sais que c'est pas la meilleure méthode, car elle crée une dépendance entre les deux classes... mais parfois, vous aurez à prendre le chemin facile...
Mise à jour
Création d'une vue en xaml peut être comme ceci:
Dans le cas d'une ModelViewLocator utilisé dans MvvmLight cela ne nécessite pas de modifications. Pour des projets très simples parfois, je créer le viewmodel dans le code xaml. Je vais l'ajouter à la poste...
OriginalL'auteur Sorskoot