2009-05-28 3 views
1

Ich verstehe, dass in der MVVM-Muster, dass ein ViewModel nichts über die Ansicht wissen sollte.Was ist der beste Weg für das ViewModel, die Ansicht zu manipulieren?

So scheint es zwei Möglichkeiten, um, dass das Ansichtsmodell kann Ursache etwas Besonderes auf der Benutzeroberfläche passieren, diese gemeinsame Fluss der Ereignisse berücksichtigen:

  • Benutzer tippt etwas in einer Textbox
  • Benutzer klickt Knopf
  • Knopf benennt DelegateCommand genannt "Save" auf Viewmodel
  • Ansicht Modell speichert Text aus Textfeld
  • wenn alles während des Speicherns gut geht, das View-Modell ändert seine INotifyPropertyChanged Eigenschaft namens SaveStatus auf „Gelungen“

nun in der Ansicht, ich zwei Möglichkeiten haben, diese Änderung zu Auswirkungen auf haben zu ermöglichen, die UI:

  • in der Ansicht könnte ein Textblock sein, der einen Converter drauf hat, das den Text von SaveStatus zu einem Satz wie „die konvertiert speichern s war erfolgreich. "
  • in der Ansicht könnte ein Trigger- sein, die überprüft, ob SaveStatus = „Erfolgreich“ und wenn ja, dann eine Reihe von Setters die Benutzeroberfläche entsprechend ändern (Elemente versteckt, Texte zu ändern, Farben zu ändern, usw.
  • )

Ist das der Grund Informationsfluss von Modelview anzeigen, die Sie in Ihren Anwendungen verwenden?

Antwort

1

Sie können auch benutzerdefinierte Ereignisse im Ansichtsmodell erstellen und die Ansicht abonnieren und entsprechend reagieren. Sie sollten dies nicht sehr oft tun müssen, aber es macht mehr Sinn, als jedes INotifyPropertyChanged-Ereignis für bestimmte Eigenschaftsnamen zu überprüfen.

0

Wir sind mit dem Model-View-Controller-Muster, so geht es wie folgt aus:

  • Benutzer tippt etwas in einer Textbox
  • Benutzer klickt speichern Taste
  • die Ansicht teilt der Controller die Daten zu speichern,
  • der Controller weist den Blick die Daten
  • der Controller speichert die Daten an das Modell
  • das c zu holen ontroller signalisiert die Ansicht, dass das Speichern gelang
  • die Ansicht zeigt „Das Speichern ist es gelungen,“

Ich glaube, Sie so ziemlich den gleichen Ansatz verwenden könnte (der einzige Unterschied, dass die Steuerung wäre und das Modell wäre sowohl die (Modell in Ihrem Beispiel anzeigen)

0

Ist dies der grundlegende Informationsfluss von ModelView zu View, den Sie in Ihren Anwendungen verwenden?

Ja. Wir verwenden INotifyPropertyChanged fast ausschließlich für Änderungen vom ViewModel zur View. Wo die Interaktion etwas komplexer ist, verwenden wir andere Ereignisse, an die sich die View anlehnt.

Anstelle einer SaveStatus-Nachrichteneigenschaft haben wir einen HasChanges-Booleschen Wert auf einem EditableAdapter, der unsere POCO umschließt und das Festschreiben/Zurücksetzen von Änderungen sowie andere berechnete Eigenschaften bereitstellt. Dann können wir unsere Ansichten an diese HasChanges binden, so dass wir zum Beispiel den Dokumentennamen mit einem * am Ende anzeigen können, um zu zeigen, dass es Änderungen hat, oder die HasChanges zum Deaktivieren/Aktivieren einer Speichern-Schaltfläche verwenden.