3 Stimmen

MVVM-Fragen zur Beispielanwendung von Josh Smith

Ich habe mich durch Josh Smiths Artikel über MVVM bei http://msdn.microsoft.com/en-us/magazine/dd419663.aspx . Jeder Abschnitt ergibt für mich einen Sinn, aber es fällt mir schwer, alles gedanklich zu einem Ganzen zusammenzufügen. Ich habe 2 Fragen, die mir sehr helfen würden.

  1. Was wäre die logische Reihenfolge, wenn ich die Beispielanwendung erstellen würde?

  2. Was geschieht bei der Befehlsstruktur in welcher Reihenfolge, wenn die Anwendung ausgeführt wird?

Ich frage mich auch, ob ich diese Frage in 2 Fragen aufteilen sollte?

3voto

Guge Punkte 4587
  1. Ich stimme Yacoder in diesem Punkt zu. Beginnen Sie mit dem, was Sie kennen, oder mit Ihrer Vision. Wenn Ihre Vision darin besteht, eine bestimmte UX zu erreichen, beginnen Sie mit Expression Blend, wenn Sie das möchten. Wenn Sie wissen, welche Funktionalität Sie wollen, beginnen Sie mit den ViewModels und den Unit-Tests.

  2. Smiths Anwendung beginnt mit App.xaml.cs. Dort wird das MainWindowViewModel und das MainWIndow erstellt und angezeigt.

MainWindow.xaml ist das nächste, was passiert. Sie definiert den Hauptteil der Benutzeroberfläche. Der Hauptteil davon zeigt zwei Sammlungen: Befehle und Arbeitsbereiche. Diese sind Mitglieder des MainWindowViewModel.

Smith scheint es zu mögen, wenn Eigenschaften prüfen, ob ihre entsprechenden privaten Felder null sind, und wenn dies der Fall ist, sie zuweisen. So wird die Sammlung "Commands" in Zeile 51 von MainWindowViewModel erstellt, das CreateCommands() gleich südlich davon aufruft.

Die Befehlsklassen werden von RelayCommand abstrahiert, wahrscheinlich weil jeder Befehl im Falle von "Show All" oder "Create" nicht viel wissen muss. Die Methoden für diese beiden Befehle befinden sich im MainWindowViewModel, da sie konzeptionell Funktionen des Hauptfensters sind.

Die Befehlssammlung wird als Liste im Hauptfenster angezeigt, daher benötigen sie eine Art präsentablen, benutzerfreundlichen Text, um sie zu beschreiben. Daher werden sie in eigene CommandViewModels verpackt.

Die Befehle werden durch die Magie von XAML dargestellt, beginnend in Zeile 41 von MainWindow.xaml. Das HeaderedContentControl ist mit der Commands-Sammlung databunden und spezifiziert CommandsTemplate von MainWindowResources.xaml (beginnend in Zeile 93 dieser Datei). Die Vorlage verwendet einen HyperLink, dessen Command-Eigenschaft an die Command-Eigenschaft des CommandViewModels gebunden ist.

Die Schaltfläche "Speichern" im Formular für neue Kunden. Diese wird von CustomerView.xaml, Zeile 117 gebunden. An die Eigenschaft CustomerViewModel SaveCommand in Zeile 196. Es handelt sich um einen RelayCommand, der auf Methoden in CustomerViewModel verweist. Jede Kundenansicht hat ihre eigene Instanz von CustomerViewModel, in der die Daten für diesen Kunden gespeichert werden. Die Instanzen von RelayCommand gehören zu diesen CustomerViewModels, so dass jede Ansicht auch ihren eigenen SaveCommand hat. Die Aktion und das Prädikat der RelayCommand-Instanz wissen nicht nur, auf welche Methoden und Eigenschaften sie zeigen, sondern auch auf welche Instanz. Die Save-Methode des CustomerViewModel verwendet nur Daten aus dieser Instanz.

Auf diese Weise können zwei Ansichten die gleiche Art von Schaltflächen haben, die für ihre jeweiligen Kundendaten das Gleiche tun.

2voto

Max Galkin Punkte 16522
  1. Beginnen Sie mit dem Teil, den Sie besser kennen. UI oder Modell das ist. Auf jeden Fall müssen Sie mehrere Iterationen über die ganze MVVM Sache zu tun, um alle Teile zusammen passen.
  2. Ihre zweite Frage ist mir nicht ganz klar. Ich würde sagen, dass keine Befehle gestartet werden, nur weil die Anwendung läuft, sondern dass eine Aktion, wie z.B. das Klicken auf eine Schaltfläche, den Befehl auslöst, um seine Aktion durchzuführen. Außerdem kann jeder Befehl aktiviert/deaktiviert werden, was dann durch den visuellen Zustand des entsprechenden Steuerelements widergespiegelt wird. Es ist ein recht häufiges Muster sogar über die Grenzen von MVVM und WPF hinaus.

2voto

Der Artikel von Josh Smith ist die beste Ressource über MVVM. Aber wenn Sie ihn nicht sofort verstehen können, sollten Sie vielleicht meinen Artikel lesen, den jeder leicht verstehen kann. http://codingtales.com/2010/02/06/creating-a-complete-tabbed-interface-in-wpf-using-mvvm/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X