2009-06-22 5 views
1

Ich habe eine WPF-Anwendung, die ein MainView.xaml Fenster hat, die zahlreiche Seitenobjekte zur Laufzeit lädt, laden sie in Viewmodel und zeigt sie im Menü dynamisch .Wie verbindet man ViewModels dynamisch mit den entsprechenden Views?

Mein MainViewModel hat eine ObservableCollection von Viewmodels und binde ich diese jeweils in die entsprechenden Ansichten in der MainView.xaml Datei.

Gibt es jedoch einen Weg zu automatisieren dies, so dass ich diese manuellen Einträge nicht jedes Mal machen muss, wenn ich eine Seite hinzufüge?

<Window.Resources> 

    <DataTemplate DataType="{x:Type vm:PageItemManageCustomersViewModel}"> 
     <v:PageItemManageCustomersView/> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type vm:PageItemManageEmployeesViewModel}"> 
     <v:PageItemManageEmployeesView/> 
    </DataTemplate> 

    <DataTemplate DataType="{x:Type vm:PageItemReportsViewModel}"> 
     <v:PageItemReportsView/> 
    </DataTemplate> 

</Window.Resources> 

Ist das nicht etwas, das ein „Servicelocator“ oder „Container“ tun sollten, um die Ansichten zu den Viewmodels Einhaken? Ich habe gelesen, dass die oben genannten üblichen Weg zu den ViewModels und Ansichten in der MVVM-Muster entsprechen, aber es kommt als Bit statische zu mir. Würde mich über irgendwelche Gedanken freuen.

+0

Es gibt eine Antwort hier: http://stackoverflow.com/questions/768304/wpf-mvvm-convention-over-configuration-for-resourcedictionary –

Antwort

-1

Eine andere Option ist die Verwendung einer Klasse zum Auflösen von ViewModels basierend auf einem Schlüssel. Sie können dies dann in Ihrer Hauptansicht verwenden, um das richtige Ansichtsmodell für Ihre Steuerelemente aufzulösen.

public static class ViewModelFactory 
{ 
public ViewModelBase Create(string someKeyHere) 
{ 
    //Some logic to resolve a view model 
} 
}