2010-11-20 22 views
0

Ich bin neu in C# und versuche, MVVM zu lernen, indem ich eine einfache Crud-App erstelle. In meiner App möchte ich eine Reihe von Schaltflächen haben, die, wenn der Benutzer darauf klickt, dieses Benutzersteuerelement laden. Wenn Sie auf "Element hinzufügen" klicken, wird das vorhandene Steuerelement durch AddItemView ersetzt. Ich habe mich gefragt, wie ich das mache? Viele der mvvm-Tutorials, die ich bisher gesehen habe, haben nur ein einziges Steuerelement auf dem MainMindow.MVVM Austauschen von Steuerelementen

Antwort

3

Für diese Art von Aufgabe verwenden Sie normalerweise ContentControl. Binden Sie die Content-Eigenschaft des Steuerelements an eine Eigenschaft Ihres ViewModel (z. B. CurrentViewModel), und definieren Sie DataTemplates in den Ressourcen für jeden Typ von ViewModel, der in ContentControl angezeigt werden kann. Wenn Sie ein ViewModel CurrentViewModel zuweisen, wählt das ContentControl das entsprechende DataTemplate für den Inhalt aus.

Hauptansichtsmodell

private object _currentViewModel; 
public object CurrentViewModel 
{ 
    get { return _currentViewModel; } 
    set 
    { 
     if (value != _currentViewModel) 
     { 
      _currentViewModel = value; 
      OnPropertyChanged("CurrentViewModel"); 
     } 
    } 
} 

App.xaml

<Application.Resources> 
    <DataTemplate DataType="{x:Type vm:AddItemViewModel}"> 
     <v:AddItemView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:FooViewModel}"> 
     <v:FooView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:BarViewModel}"> 
     <v:BarView /> 
    </DataTemplate> 
    ... 
</Application.Resources> 

Hauptansicht

... 
<ContentControl Content="{Binding CurrentViewModel}" /> 
... 

In Ihrem Fall in der Befehl für die "Add item" Schaltfläche, weisen Sie eine Instanz von AddItemViewModel zu CurrentViewModel

+0

Sagen wir, wenn ich anstelle von nur ein einfaches Datenobjekt habe ich eine Gruppe von Elementen und einige Funktionen. Könnte ich UserControls anstelle von ViewModels ausschalten, und jedes UserControl könnte sogar ein eigenes ViewModel haben usw.? –