Gibt es eine Diskrepanz zwischen MVVM und der Möglichkeit, den Komponentenbaum der View zu ändern?

8

Nachdem ich alle StackOverflow-Einträge bezüglich der Model-View-ViewModel-Architektur zusammen mit den meisten verfügbaren Ressourcen im Netz gelesen habe, bin ich zu dem Schluss gekommen, dass dies der De-facto-Standard für das Bauen ist SOLID Silverlight-Apps.
Ich begann meine nächste Anwendung mit dieser Architektur zu planen. Eine der Anforderungen für die Anwendung besteht darin, die visuelle Komponentenstruktur zu erstellen oder zu ändern. Wenn ich zum Beispiel auf Benutzerinteraktion antworte, möchte ich programmatisch eine unbekannte Anzahl von Rectangles und Ellipsen zur Kompilierungszeit an ein bestimmtes Canvas oder Canvas anhängen Ich begann meine Gedanken zu verdrehen, um das MVVM-Muster anzuwenden und zu überlegen, wohin der für das Anbringen der neuen Komponenten verantwortliche Code gehen sollte. Ich kam zu dem Schluss, dass es zu keiner der MVVM-Schichten gehört und daher ist es unmöglich, diese Architektur in Szenarien anzuwenden, in denen Sie den Komponentenbaum zur Laufzeit manipulieren müssen.
Gibt es eine Möglichkeit, Model-View-ViewModel in solchen Szenarios noch zu verwenden oder ist es nur eingeschränkt mit einer festen View-Komponentenstruktur zu arbeiten?

    
Przemek 27.02.2009, 09:16
quelle

2 Antworten

8

Manipulieren Sie den Komponentenbaum nicht. Manipulieren Sie stattdessen ein Modell, das den Komponentenbaum darstellt. Dann binden Sie Ihre Ansicht an die verschiedenen Sammlungen und Eigenschaften in diesem Modell, um ihre Visuals zu erstellen.

Was folgt, ist ein wirklich vereinfachtes Beispiel. Es zeigt nur die Konzepte - bitte nehmen Sie es nicht als Hinweis darauf, wie Sie Ihren Code faktorisieren sollten.

Zuerst mein Modell:

%Vor%

Als nächstes belichte ich eine Sammlung dieser Formen (Sie würden ein anderes Modell verwenden, um diese Sammlung zu enthalten). Dann verbinde ich es aus meiner Sicht:

%Vor%     
Kent Boogaart 27.02.2009, 09:21
quelle
2

Das grundlegende Problem in Ihrer Frage ist verwirrende Anforderungen Ihrer Benutzer (Manipulieren von Objekten, die durch Rechtecke und Ellipsen (ich denke nur)) mit Implementierungsdetails (anhängende Rectangle s und Ellipse s bis% co_de) % es).

Noch einmal, die verschiedenen Verantwortlichkeiten im MVVM-Muster:

Anzeigen

Übersetze das ViewModel in Pixel und übersetze Eingabeereignisse in Methodenaufrufe im ViewModel.

Dies wären die eigentlichen Silverlight-Komponenten ( Canvas , Rectangle , Ellipse ), die gegen ihre Canvas binden und einige sehr kleine Event-Handler oder DataContext s oder was auch immer haben.

Modell

Halten Sie Daten und Geschäftslogik domänenspezifisch.

Dies stellt die "mathematischen" Rechtecke und Ellipsen dar, die Ihre Benutzer zeichnen.

Ansichtsmodell

Verfeinern Sie das Modell auf eine UI-orientierte und häufig anwendungsspezifische Weise.

Hier speichern Sie die transienten Informationen wie "aktuell ausgewähltes Objekt", die für eine bestimmte Ansicht relevant sind, aber keine Attribute des zugrunde liegenden Modells sind.

Lesen Sie mein Blog für mehr zu meinen Ansichten zu MVVM .

    
David Schmitt 27.02.2009 09:53
quelle

Tags und Links