2009-05-24 5 views
4

Nun, diese Frage bezieht sich auf MVVM-Muster und ich konnte gute und schnelle Antworten auf diesem Forum, so dass ich dachte, die Verwirrungen zu fragen und zu klären, die ich über das Muster hatte.Verwirrung über MVVM-Muster und dynamisches Laden von XAML in GUI

Ich bin ziemlich neu in MVVM Ansatz. Ich schätze das Muster und verstehe die Prinzipien dahinter. Vielleicht habe ich nicht so viel mit dem Muster gearbeitet, deshalb gibt es ein paar Verwirrungen.

Wenn es ein Szenario gibt, in dem ich einige Teile meiner WPF-Seite dynamisch mit XAML laden möchte und dennoch mit MVVM-Ansatz kompatibel sein möchte.

Die Verwirrung ist:

  1. Wo die Logik der residieren eine Ansicht dynamisch mit XAML geladen.
  2. Ob ich ein einzelnes ViewModel für meine WPF-Seite oder jeden einzelnen Teil haben sollte, hat sein eigenes Viewmodel mit Interaktionen mit anderen Viewmodel-Klassen.
  3. Was wäre, wenn ich Control-Tree auf der GUI mit C# -Code im Codebehind selbst erstellt hätte. Für die Steuerelemente, die mit Code erstellt werden, sollte ich die Befehlsbindungen im Codebehind der Ansicht selbst vornehmen.

Antwort

1

Wo die Logik für das Laden geht, wird etwas nicht wirklich durch das Muster selbst adressiert. Es gibt eine interessante blog post darüber von Ward Bell. Es gibt eine Reihe von Möglichkeiten, diese Katze zu häuten, und sie sind alle mit MVVM kompatibel. Nicht wirklich die Antwort, die du suchst, ich weiß, aber es ist ehrlich :). Schauen Sie sich den Blog-Beitrag von Ward an ... Sie werden eine viel tiefere Diskussion dieses Themas bekommen.

Ob es eine einzelne VM für die Seite oder eine für jedes Steuerelement gibt, hängt nur davon ab. Generell habe ich einen für die Seite. Wenn es einen Teil gibt, der an anderer Stelle wiederverwendet werden kann, breche ich ihn in ein Benutzersteuerelement mit seiner eigenen VM aus, was bedeutet, dass wir eine VM in einer VM haben. Ich stimme Rockeye nicht zu. Es gibt keine Eins-zu-Eins-Beziehung zwischen V-VM-M. Ihre Modelle werden gemäß den Geschäftsanforderungen entworfen, ohne Berücksichtigung der Präsentation. Ihre ViewModels werden gemäß Ihren Präsentationsanforderungen entworfen und können mehr als ein Model kapseln. Tatsächlich ist es sehr üblich, dass sie viele Modelle einkapseln.

Wie Rockeye, verstehe ich deine letzte Frage nicht.

+0

Große Antwort +1 für den Link –

0

Ich bin auch ganz neue, mvvm, aber ich werde versuchen zu beantworten:

  1. Wo die Logik eine Ansicht dynamisch mit XAML des Ladens

Wenn Sie Ihren Wohnsitz "Wie kann ich die mit meinem Geschäftsobjekt verknüpfte Ansicht anzeigen?", IMHO, Sie müssen sich nicht darum kümmern. Normalerweise verfügen Ihre VMs über entsprechende Ansichten. Mit dataTemplate verwenden Sie nur VM im Code, aber Views werden automatisch angezeigt.

2 Ob ich ein einzelnes Ansichtsmodell für meine WPF-Seite oder jeden separaten Teil haben ein eigenes Ansichtsmodell mit Wechselwirkungen mit anderem Ansichtsmodell Klassen

Es scheint, Sie haben einen Top-Bottom-Ansatz haben sollte. Ich sehe den MVVM mehr als Bottom-up: Modelle (Business-Objekte) -> ViewModels -> Ansichten. Jedes Modell sollte sein eigenes ViewModel und View haben. Sie können also keine ganze WPF-Seite in einem viewModel haben, es sei denn, Sie modellieren eine Seite.

3 Was wäre, wenn ich Control Tree auf der GUI mit C# -Code im Codebehind selbst erstellt hätte. Für die Steuerelemente, die mit Code erstellt werden, sollte ich die Befehlsbindungen im Codebehind der Ansicht selbst ausführen.

Verstehe nicht. Ich denke, Sie können sich dataTemplate ansehen, es könnte hilfreich sein.