Frage

.

ich "versuche, meinen Kopf um MVVM zu wickeln Ich verstehe eine Menge davon, aber ich habe Schwierigkeiten Greifen ein Aspekt. Einstellung Datacontext

Ich möchte mit einem bestimmten Objekt eine Ansicht zeigen. Der Benutzer bekommt nicht zu entscheiden, was zu sehen ist, also muss ich den Blick in den Code erstellen. Dann möchte ich auf ein Objekt der Datacontext der Ansicht einzustellen (die Bindung). Ich versuche nicht, Code in der Ansicht für das zu setzen, aber View.LayoutRoot.DataContext ist nicht öffentlich.

Was bin ich fehlt?

versucht, dies zu vermeiden:

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

mit so etwas wie folgt aus:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
War es hilfreich?

Lösung

Sie nicht vergessen, dass der Blick über das Viewmodel wissen sollte, und nicht umgekehrt.

So in Ihrem Fall Code in dem Ansichtsmodell Puting die Ansicht zu erstellen ist nicht der beste Weg, um.

Josh Smith Artikel auf MVVM hat eine Abschnitt auf den Blick auf das Ansichtsmodell anwenden. Er empfiehlt WPF Datatemplates mit Ihrer Ansicht in XAML wählen.

Andere Tipps

Wenn Sie eine XAML-Steuerung oder Fenster verwenden (was der Fall sein sollte, wenn Sie MVVM verwenden), ist LayoutRoot (Grid Standardeinstellung) öffentlich. In Ihrem Beispiel verwenden Sie nur eine einfache Klasse für View, so ist es schwer zu sagen ist, was los ist.

Auch ich zweite Camerons Meinung - noch anzeigen oder Modelview sollte mit Zuordnung Datacontext beschäftigen. Es kann auf verschiedene Weise (Datatemplate, Dependency Injection, spezielle Builder-Klasse, einfacher Code), aber normalerweise getan werden, es geschieht auf der Anwendungsebene.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top