Frage

Diese beide 1-Stunden-Videos zeigen Schritt-für-Schritt, wie Sie das MVVM Muster verwenden einfache Quiz-Anwendungen erstellen sowohl in Silverlight und WPF:

Implementierung Model-View-Viewmodel in Silverlight

Implementierung Model-View-Viewmodel in WPF

Was ist diese erstaunt mich ist , wie unterschiedlich sie sind strukturell , zum Beispiel, wie sie verwenden Databinding:

In dem Silverlight-Ansatz, we setzt die Datacontext einer Ansicht ein ObservableCollection in dem Ansichtsmodell :

<views:QuestionView x:Name="QuestionDataView" />

QuestionViewModel qdata = new QuestionViewModel();
qdata.FetchQuestions();
QuestionDataView.DataContext = qdata.Questions;

In der WPF Ansatz, we setzen die Datacontext des Fenster der Ansichtsmodell selbst .

<view:QuizView Margin="4" />

base.DataContext = new QuizViewModel(Quiz.Create());

Es scheint nur, dass jedes MVVM Beispiel ich sehe Datacontext in einer leicht neuen Variante Bindung und ich bin versucht, etwas festen Boden zu zu „ wie Datacontext Bindung erfolgt in dem MVVM Muster “.

Was geht Ihnen durch den Kopf, wenn Sie sich entscheiden, die Datacontext etwas zu binden. Warum die Datacontext eines binden Fenster / Ansicht / ListBox / etc ObservableCollection / Modelview / usw. ? Was sind die Vorteile, Nachteile, hier Strategien?

Jeder Eingang geschätzt.

War es hilfreich?

Lösung

Haben sie erwähnen, warum der andere Ansatz für Silverlight verwendet wurde? Es kann nur eine Begrenzung der Plattform sein.

Die empfohlene Vorgehensweise ist unbedingt die Modellansicht zu verwenden, sich als Ihre Ansicht der DataContext. In der Tat, nicht die Ansicht, explizit erstellen, sollten Sie die Ansicht Modell sein und WPF für Sie die Ansicht beheben. Um dies zu tun, registrieren Sie einen DataTemplate:

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <local:MyView/>
</DataTemplate>

Dann kleben Sie einfach Ihre Ansicht Modellinstanz in ein ContentControl, ItemsControl oder was auch immer und WPF wird es mit dem entsprechenden DataTemplate machen. Das DataTemplate wird die Ansicht Modell als DataContext haben, die aufgrund der Template-System WPF.

Andere Tipps

Wenn Sie die Kommentare für das Silverlight-Video lesen Sie werden sehen, dass auf ein ObservableCollection die Bindung ein Fehler war. Es bewirkt, dass eine Ausnahme ausgelöst werden.

Die meiste Zeit der Blick auf das Viewmodel gebunden ist (ich kann in der Tat nicht aus einem Grunde denken, wenn ich nicht tun würde, dass)

über Kents Beispiel ist die allgemeine Regel, die ich folgen, bekommen Silverlight die Ansicht erstellen für mich eine Sammlung von Viewmodels gegeben.

Ich habe einige Unterstützung von einigen begnadeten MS-Ingenieuren an unserem Projekt hat und sie verbindlich sind die View Datacontext direkt zur Ansicht Modell.

Im Idealfall sollten Sie keinen Code hinter Code haben anders als Ihre Daten Kontexteinstellung -. Infact dies kann auch in XAML erfolgen

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