-
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.
-
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.