C# Suche einfaches MVVM Dialogs Tutorial

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo
ich lerne gerade MVVM und möchte Dialoge richtig einsetzen.

Projekt: Datagrid im MainWindow mit Add/Update Dialog
für die Items im DataGrid.

Add und Update als separate Windows (ShowDialog).

Mein Problem ist z.Zt. die Kommunikation zwischen den ViewModels.

Nun suche ich ein einfaches Tutorial, welches einen guten (üblichen) Ansatz beschreibt.
Ich habe gelesen, dass der Einsatz eines event basierten communication models die beste
Lösung sei.

Wer kennt ein Tutorial dazu (gern auch auf Englisch).

IDE: VS2012 Exp.

Vielen Dank.
 
BlooDFreeZe schrieb:
Naja du könntest einfach den Dialogen das gleiche ViewModel geben und diese führen dann einfach einen Add/Update Command aus.
Ansonsten kommt es darauf an ob und welche MVVM Library du verwendest. MVVM light hat z.B. einen Messenger der relativ einfach zu verwenden ist. Siehe z.B. hier http://stackoverflow.com/questions/16993918/mvvm-light-messenger-sending-and-registering-objects

Vielen Dank für deine Antwort.

Ich habe in Vers. 1 die gesamte Programmfunktionalität in EIN ViewModel gepackt.
That ends up in a total mess. ;) Kommt also nicht mehr in Frage.

Ich werde mir MVVM Light ansehen. Im Moment nutze ich das MicroMvvm von Josh Smith mit
Messenger Integration. Dabei gibt es aber Probleme mit der Receive-Funktionalität beim Empfänger-ViewModel.

Ich dachte, es gibt eine Standard-Lösung dafür.
 
Zuletzt bearbeitet:
Für MVVM gibt es kein Rezept mit dem man es umsetzen kann. Zum Beispiel sind manche der Meinung, es sollte fast kein Code in eine *.xaml.cs Datei. Andere sagen etwas Code ist okay, solange es nur um UI Elemente geht. Bei sehr kleinen Anwendungen macht es Sinn ganz auf MVVM zu verzichten usw. Letzen Endes muss man wissen welche Möglichkeiten man hat, welche Vorteile und Nachteile es gibt und das ganze dann je nach Situation einschätzen und umsetzen. Man sollte aber nicht versuchen auf biegen und brechen alles unbedingt in die MVVM Struktur rein zu quetschen wenn es nur Aufwand ist und keinen Sinn macht.
Zu MicroMvvm kann ich dir leider nichts konkretes sagen.
 
BlooDFreeZe schrieb:
Für MVVM gibt es kein Rezept mit dem man es umsetzen kann. Zum Beispiel sind manche der Meinung, es sollte fast kein Code in eine *.xaml.cs Datei. Andere sagen etwas Code ist okay, solange es nur um UI Elemente geht. Bei sehr kleinen Anwendungen macht es Sinn ganz auf MVVM zu verzichten usw.

Ja das sehe ich ebenso. Da ich aber MVVM z.Zt. lerne, möchte ich es auch in meinen Projekten
nutzen.

Ich suchte eine Lösung für das Problem Child-ViewModels senden und empfangen Objekte an/vom Parent-ViewModel. Ich dachte es gibt da eine Standard-Lösung (ähnlich den Design-Patterns).
Z.B. wenn man es mit Messenger/Mediator oder Event basiert umsetzt, kommt man immer ans Ziel.
Habe inzwischen bemerkt, dass jeder seine eigene Lösung (MVVM-Struktur) finden muss. Ich bin gerade dabei.
 
Zuletzt bearbeitet:
Joa. Bei Child -> Parent Kommunikation gibt's auch viele Möglichkeiten. Was ich bisher alles gesehen habe:
- Keine Parent/Child Struktur, Child schickt ne Message mit den Daten vom Dialog
- ParentVM übergibt ChildVM einen Command -> childVM führt aus mit entspr. Parametern
- ParentVM übergibt ChildVM eine Action -> childVM führt Action aus mit entspr. Parametern
- Dem ChildVM den kompletten Parent übergeben und eine Methode ausführen
- ChildVM stellt Event zur Verfügung, ParentVM abonniert es
- ChildVM ist Property von ParentVM, DataContext von Dialog bindet ParentVM, UI Elemente Binden dann an ParentVM.ChildVM.Property, Add/Update Command auf dem ParentVM ausführen zum speichern.

Ich bevorzuge eigentlich generell eher den entsprechenden Messenger. Ist meistens am saubersten und man kann sich Kopplung zwischen den Klassen sparen. Ich habe (bei sehr kleinen Dialogen) aber z.B. auch schon die letzte Variante umgesetzt.
 
Zuletzt bearbeitet:
Da MVVM darauf setzt so gut wie möglich zu kapseln, gibt es eigentlich nur eine Variante: Messaging. Bei allem anderen entstehen Abhängigkeiten.

Es gibt demzufolge auch keine Parent/Child Struktur. Denn ein Dialog kann z.B. auch von woanders aufgerufen werden, sofern die entsprechende Schnittstelle eingehalten wird (also in dem Fall die Message).

Der Dialog bezieht sich ja auch nicht auf das Grid, sondern auf eine Collection von Models bzw. ViewModels. Und es geht um die Bearbeitung dessen. Das Grid zeigt nur die Auswirkungen dieser Veränderungen.

MVVM dreht sich m.M.n. nicht um "Ich zeige etwas an und möchte die angezeigten Daten bearbeiten", sondern um "Ich habe eine veränderbare Datenbasis und möchte diese so gut wie möglich darstellen". Etwas blöd ausgedrückt, aber vielleicht verstehst du ja was ich meine. Kein MVVM: Erst Visual, dann Logik, mit MVVM: Erst Logik (und Tests), dann Visual.
 
Zuletzt bearbeitet:
Zurück
Oben