Question

Est-il possible de passer un paramètre au constructeur ViewModel? Je voudrais ensuite utiliser ce paramètre pour initialiser une propriété et / ou faire d'autres opérations dans le ViewModel.

Avec WinForms je pouvais faire

public MyForm(MyParamType myParam) {
    MyFormProperty = myParam;
    //etc.
}

Comment puis-je à faire quelque chose de similaire dans le modèle MVVM / en utilisant MVVM Light?

Toutes les suggestions seront les bienvenues. Merci à l'avance.

Était-ce utile?

La solution

Je recommande d'utiliser un conteneur IoC et la configuration de votre conteneur pour fournir le paramètre sur la construction.

Par exemple, voici ce qu'un type code-behind à un look UserControl comme pour moi dans WPF:

public partial class MyDataGridView : IMyListView
{
    public MyDataGridView()
    {
      InitializeComponent();
    }

    public MyDataGridView(MyListViewModel viewModel)
    {
      InitializeComponent();

      DataContext = viewModel;
 }
}

StructureMap crée le MyListViewModel pour moi parce que par défaut, il recherche le constructeur et fournit ensuite cupide les dépendances. Dans ma configuration StructureMap, je peux préciser que le MyListViewModel fourni avec tout ce que les paramètres nécessaires à la construction de cet objet.

Avec un récipient comme StructureMap, je n'ai pas « nouveau » des objets. Déjà.

Autres conseils

Si vous utilisez la lumière MVVM (même si vous n'êtes pas je suppose), vous pouvez enregistrer un gestionnaire de message avec le messager qui prend vos paramètres du constructeur (ou un tuple de celui-ci) et met à jour la machine virtuelle à chaque fois que vous devez « Reconstruire " il.

Comme tous les modèles de vue sont statiques sur le localisateur, vous pouvez simplement accéder à ces propriétés déjà sans changer un constructeur.

Je ne comprends pas pourquoi vous ne pouvez pas simplement créer la viewmodel vous-même. Vous pouvez toujours créer votre propre viewmodel. S'il y a un viewmodel fourni par MVVM Lumière, alors vous pouvez toujours hériter de celui-là et créer un constructeur surchargé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top