Die Sitzung findet unter statt Entschuldigung für die Eigenwerbung. Prost, Laurent @Laurent: Ich habe diese Eigenwerbung verpasst, bevor ich Ihre Sitzung zu meiner Antwort hinzugefügt habe. :):) +1 Ich fand dein Techdays-Video auf mvvm sehr hilfreich! =) … Es gibt nicht viele Bücher über MVVM, aber eines: Advanced MVVM Aber es gibt viele Online-Ressourcen und diese ist ein Muss: WPF-Apps mit dem Model-View-ViewModel-Entwurfsmuster Danach schlage ich vor, Frameworks wie zu untersuchen MVVM Light Toolkit Caliburn 2 +1 beim Spielen mit WPF und MVVM am vergangenen Wochenende stieß ich fast sofort auf die Einschränkung, dass ich Event-Handler nicht an das Ansichtsmodell binden konnte. Die Frameworks, die Sie verlinken, scheinen das zu beheben, also werde ich sie auf jeden Fall überprüfen! Hier ist ein Tutorial für MVVM, das in 5 Schritten von der Grundstufe zur Fortgeschrittenenstufe übergeht. Es ist also so, als würde man von einer 3-Schicht zu einer vollständigen MVVM wechseln. Um große Dinge zu tun (wie das Erlernen von WPF + MVVM), ist es besser, die Aufgabe in kleineren Schritten aufzuteilen.
Mvvm Schritt Für Schritt Kopiervorlagen
Das ViewModel ist ein Bestandteil des Patterns MVVM. Dieser Beitrag gibt eine Einführung in dieses Thema und zeigt ebenfalls eine praxisnahe Verwendung anhand von Beispielen auf. Kürzlich habe ich eine Anfrage erhalten, was die einzelnen Objekte, welche durch das Pattern MVVM beschrieben werden, tatsächlich beinhalten. Darauf möchte ich kurz mit meiner Interpretation dieses Patterns eingehen und zur Diskussion stellen. Die weiteren Bestandteile des MVVM-Patterns:
Die View
Das Model
Definition ViewModel
Das ViewModel stellt das Model für die View dar. Es gibt das eigentliche Model nach außen. Darauf kann per Datenbindung gebunden werden. Durch die im Model implementierte Change Notification werden Änderungen direkt an die View weitergeben. Code, der dies manipuliert, ist nicht notwendig. Ebenfalls stellt das ViewModel Funktionalitäten per Commands zur Verfügung. Diese werden durch die View ebenfalls gebunden, wodurch in der View kein Code dafür anfällt. Besonders wichtig ist, dass das ViewModel nicht mit einem Code-behind verwechselt werden darf.
Mvvm Schritt Für Schritt Kochen
Viele Tutorials, die ich zum Thema MVVM gelesen habe, funktionieren teilweise nicht, erklären Dinge nicht richtig, etc. Dies ist nun also mein Versuch, MVVM verständlich zu erklären. Das ganze werde ich auf C# 4. 0 und Visual Studio 2010 aufbauen. Was ist nun MVVM und wo liegt der Unterschied zu MVC oder MVP? Model View Controller
Model View Presenter
Model View ViewModel
Allen gemeinsam ist das M(odel) und ein V(iew). Die Logik liegt bei MVC im C(ontroller), bei MVP im P(resenter) und bei MVVM im V(iew)M(odel). Soweit sind alle schonmal recht ähnlich. Der Unterschied offenbart sich, sobald man die Assoziationen anguckt. Bei MVC steuert der Controler sowohl View, als auch Model. Bei MVP bedingt sich nun alles gegenseitig. Das Besondere an MVVM ist nun, dass das ViewModel nicht unsere View steuert, sondern lediglich Daten für diese bereitstellt. Das ganze Funktioniert über eine Technik, die sich Data Binding nennt. Dadurch ist es möglich, eine sehr lose Kopplung zwischen den Schichten zu bekommen.
Mvvm Schritt Für Schmitt.Free
Leider gibt es keine großartige MVVM-Beispiel-App, die alles kann, und es gibt viele verschiedene Ansätze, um Dinge zu tun. Zunächst möchten Sie sich vielleicht mit einem der App-Frameworks vertraut machen (Prism ist eine gute Wahl), da es Ihnen praktische Tools wie Abhängigkeitsinjektion, Befehle, Ereignisaggregation usw. bietet, mit denen Sie auf einfache Weise verschiedene Muster ausprobieren können, die zu Ihnen passen. Die Prismenfreigabe:
Es enthält eine ziemlich anständige Beispiel-App (den Aktienhändler) sowie viele kleinere Beispiele und Anleitungen. Zumindest ist es eine gute Demonstration einiger gängiger Untermuster, mit denen MVVM tatsächlich funktioniert. Ich glaube, sie haben Beispiele für CRUD und Dialoge. Prisma ist nicht unbedingt für jedes Projekt geeignet, aber es ist eine gute Sache, sich damit vertraut zu machen. CRUD:
Dieser Teil ist ziemlich einfach. WPF-Zweiwege-Bindungen machen es wirklich einfach, die meisten Daten zu bearbeiten. Der eigentliche Trick besteht darin, ein Modell bereitzustellen, mit dem die Benutzeroberfläche einfach eingerichtet werden kann.
Mvvm Schritt Für Schritt A1 1
Nun müssen noch die in der "" Ausgelagerten Assembly-Informationen aus allen anderen entfernt werden und die Common-Datei als Link zu den einzelnen Projekten hinzugefügt werden (der Pfeil beim "Hinzufügen"-Button, wenn eine Vorhandene Datei hinzugefügt werden soll). Für die würde ich folgenden Inhalt empfehlen:
using flection;
[assembly: AssemblyCompany("")]
[assembly: AssemblyCopyright("Copyright © 2013 , All rights reserved. ")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyVersion("1. 0. *")]
[assembly: AssemblyFileVersion("1. *")]
Nun ist es noch erforderlich, das sämtliche Projekte (z. B. mittels NuGet) Referenzen auf ihre nötigen Assemblys bekommen (Normale Projekte: log4net; UnitTest Projekte: log4net sowie NUnit). Dies wäre unsere Projektstruktur. Fragen, Anregungen, Kritik, Hinweise und vieles mehr bitte über die Kommentar-Funktion. Nachfolgenden nun nochmal die Referenzen zu unseren Projekt. Redmine-Projekt (SmallMvvm):
Repository (Mercurial, benötigt Redmine-Login):
Ebenfalls könnt Ihr den aktuellen Stand des Frameworks hier beziehen: Small MVVM – Revision 2
Es ist gängige Praxis, Eigenschaften zu implementieren, die PropertyChanged wie folgt aufrufen:
get { return _firstName;}
set { SetProperty(ref _firstName, value);}}
Lassen Sie uns SetProperty in Ihrer viewmodelbase definieren:
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = "")
if (EqualityComparer. (storage, value))
return false;
storage = value;
this. OnPropertyChanged(propertyName);
return true;}
Es feuert einfach PropertyChanged Ereignis, wenn sich der Wert der Eigenschaft ändert und true zurückgibt. Es löst das Ereignis nicht aus, wenn sich der Wert nicht geändert hat und gibt false zurück. Die Grundidee ist, dass SetProperty -Methode ist virtuell und Sie können sie in eine konkretere Klasse erweitern, z. B. um eine Validierung auszulösen, oder durch Aufrufen PropertyChanging Veranstaltung. Das ist hübsch. Dies ist alles, was Ihre ViewModelBase zu diesem Zeitpunkt enthalten sollte. Der Rest hängt von Ihrem Projekt ab. Ihre App verwendet beispielsweise die Seitenbasisnavigation und Sie haben Ihren eigenen NavigationService für die Handhabung der Navigation von ViewModel geschrieben.