2009-04-07 3 views
5

In unserer WPF-Anwendung möchten wir das grundlegende MVVM-Muster verwenden. Wir diskutierten darüber und einige Unsicherheiten bezüglich ViewModel/View-Beziehung und Validierung kamen auf. Würdest du sagen, dass das Folgende ein gutes Verständnis davon ist?ViewModel/View-Beziehung und Validierung

  • Jede View hat eine und nur eine Ansichtsmodell und das Ansichtsmodelles Zweck ist seine Ansicht mit Daten zu versorgen und Griff all seine Sicht der Ereignisse und Befehle. (Gibt es Fälle, in denen ein Ansichtsmodell Dienst zwei Ansichten, zum Beispiel einer Standard-XAML Eingabeformular Ansicht und ein CSV-Import, die die gleichen Daten wie die Form bereitstellt und müssen somit die gleiche Validierung haben?)

  • Validierung allein behandelt wird durch das ViewModel wenn z die Ansicht wirft ein ChangedFocus oder SaveButtonPressed Ereignis usw.

  • Das Modell ist ziemlich dumm, einfach die Datenstruktur auf Basis einer oder mehr Tabellen aus der Datenbank zu sein, aber das Modell selbst nicht Handle Validierung, zum Beispiel. Es ist sogar das ViewModel, das die ObservableCollection von Objekten aufbaut und hält, z. "Kunden" und nicht das Modell selbst.

Jedes Feedback zu schätzen.

Antwort

5

Jede View hat eine und nur eine Ansichtsmodell

Ich denke, wenn man streng über Ihre Nachfolge des Musters ist dann jede Ansicht nur ein Ansichtsmodell hat. Wir haben einen Fall in unserer Anwendung, bei dem sich die Anforderungen in der Mitte des Datenstroms änderten und es am einfachsten war, wenn die View zwei verschiedene ViewModels referenzierte. Je nachdem, wie Sie das Muster implementieren, ist dies möglich oder nicht möglich.

Gibt es Fälle, in denen ein Ansichtsmodell Dienste zwei Ansichten

Ja, das ist einer der Vorteile des Musters.

Validierung wird allein durch das Ansichtsmodell behandelt

Nicht unbedingt. Wir haben uns dafür entschieden, dass unsere Modellklassen IDataErrorInfo implementieren und die Validierung selbst durchführen. Dies stellt sicher, dass unabhängig davon, wo die Model-Klasse verwendet wird, die Validierung dieselbe ist. Wenn sich die Validierung jemals ändern muss, findet sie nur an einer Stelle statt.

Das Modell ist ziemlich dumm

Es ist nur so dumm ist, wie Sie es haben wollen. Sie können Validierungs- und Geschäftsregeln in das Modell aufnehmen, wenn Sie möchten.

1

Gibt es Fälle, in denen ein Ansichtsmodell Dienste zwei Ansichten

Enthäutete Anwendungen diese Fähigkeit nutzen können.

Das Modell ist ziemlich dumm aber das Modell selbst Validierung kann

Das Modell so klug sein, wie Sie möchten nicht handhaben. Und es kann "Validierung" enthalten, um die Integrität sicherzustellen, aber diese Validierung wird keine Nachrichten enthalten, die auf der Benutzeroberfläche angezeigt werden.

3

Ich stimme allem oben überein. Nur ein Kommentar: Ihr Ansichtsmodell kann ein anderes Ansichtsmodell verwenden. Mit diesem Ansatz können Sie Ihre Ansicht in mehrere Regionen aufteilen, die mit unterschiedlichen Ansichtsmodellen bereitgestellt werden. Verwenden Sie einfach ContentPresenter, binden Sie es an die erforderliche Ansichtsmodelleigenschaft (die das benötigte Ansichtsmodell benötigt), und verwenden Sie DataTemplate, um die benötigte Ansicht mit Ihrem Ansichtsmodell zu verknüpfen.

+0

ja Ich habe das in einer Reihe von Beispielen gesehen, wo ein ViewModel eine Sammlung von ViewModels enthält, schöne Erinnerung, danke –