Question

J'essaie de comprendre le MVVM. J'en comprends beaucoup, mais j'ai du mal à saisir un aspect: Définition du DataContext .

Je souhaite afficher une vue avec un objet particulier. L'utilisateur ne peut pas décider ce qui est visible, je dois donc créer la vue dans le code. Ensuite, je veux définir le DataContext de la vue sur un objet (pour la liaison). J'essaie de ne pas mettre de code dans la vue pour cela, mais View.LayoutRoot.DataContext n'est pas public.

Qu'est-ce qui me manque?

essayant d'éviter cela:

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

avec quelque chose comme ceci:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
Était-ce utile?

La solution

N'oubliez pas que View doit connaître le ViewModel et non l'inverse.

Dans votre cas, insérer du code dans le ViewModel pour créer la vue n'est donc pas la meilleure solution.

L’article de Josh Smith sur MVVM a une section sur l'application de la vue au modèle de vue. Il recommande d'utiliser les DataTemplates de WPF pour sélectionner votre vue en XAML.

Autres conseils

Si vous utilisez un contrôle XAML ou une fenêtre (ce qui devrait être le cas si vous utilisez MVVM), LayoutRoot (Grid par défaut) est public. Dans votre exemple, vous utilisez uniquement une classe simple pour View. Il est donc difficile de savoir ce qui se passe.

J'appuie également l'opinion de Cameron - ni View ni ModelView ne doivent traiter de l'attribution de DataContext. Cela peut être fait de différentes manières (DataTemplate, injection de dépendance, classe de constructeur spéciale, code brut) mais cela se produit normalement au niveau de l'application.

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