MVVM-Architektur-Fragen

25/04/2010 - 13:17 von Holger | Report spam
Hallo NG,

ich versuche eine anwendung in WPF (spàter evtl. auch Silverlight) zu
schreiben. Dabei möchte ich dringend das MVVM-Pattern einhalten,
einfach, um insbesondere festzustellen, ob es für mich anwendbar ist.
Aktuell stoße ich auf folgende Probleme:

Ich habe ein TreeView-Control als Menüstruktur (kann man sich àhnlich
dem TreeView beim SQL-Server vorstellen, also mit Ordnern und
tatsàchlichen Anwendungen). Auf der rechten seite sollen geöffnete
Anwendungen in einem TabControl angezeigt werden.
Für das Treeview habe ich mehrere TreeViewItemViewModels angelegt -
einmal das TreeViewViewModel selbst (also quasi die Wurzel) und dann
für jedes verschiedene Unterelement ebenfalls ein eigenes - um beim
Beispiel SQL-Server zu bleiben also ItemViewModels für Tables, Views
und Funktionen. Um die Struktur aufzubauen hole ich mir den kompletten
Graphen aus der DB (via EF4). Die TreeviewItemViewModels werden dann
rekursiv über ihre Konstruktoren aufgebaut.
Soweit so gut. Nun kennt jedes TreeItem-Element natürlich eigene
Befehle, die in einem Kontextmenü (oder auch woanders) erscheinen
sollen. Also habe ich eine Eigenschaft "Commands" eingefügt, die im
HierarchicalDataTemplate an das Kontextmenü gebunden werden:

<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<StackPanel.ContextMenu>
<ContextMenu ItemsSource ="{Binding Commands}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Header}"
Command="{Binding}" CommandParameter="{Binding}"/>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>

Im jeweiligen TreeviewItemViewModel definiere ich für jedes dieser
commands eine Ereignismethode.

So - nun die Frage(n)
1) Im TabViewModel gibt es eine ObservableCollection, die die Tabs
registriert, damit diese an der Oberflàche angezeigt werden. Das
TreeItemViewModel kennt dieses TabViewModel aber nicht. Wie öffne ich
jetzt am besten den Tab ohne die Information über das TabViewModel den
ganzen Baum hinunter mitzusenden?
2) Die commands sind eine witzige Geschichte sind aber m.E. in
Silverlight nicht verfügbar. Wie löst man denn hier solche Probleme?

viellicht habe ich das auch völlig falsch aufgebaut - leider gehen die
mir bekannten WPF/sL-Tutorials auf solche Themen nicht ein...

Danke für jegliche Hilfe!

Viele Grüße
Holger
 

Lesen sie die antworten

#1 Holger
25/04/2010 - 13:55 | Warnen spam
Ok... ich bin selten dàmlich - die Anwendungen erben einfach von
TabViewModel und melden sich via Kontruktor in der Basisklasse an.
Dort werden die Tabs in einer statischen Collection gehalten und
implizit geöffnet...
Bleiben die Fragen:
1) Mache ich das mit dem commands in einem TreeView tatsàchlich so?
2) Was ist mit Commands und SL?

Danke & Gruß
Holger

Ähnliche fragen