Erstens brauchen Sie nicht eine dieser Toolkits/Frameworks um MVVM zu implementieren. Es kann so einfach sein wie dies ... angenommen, wir haben eine MainViewModel
, und PersonViewModel
und eine CompanyViewModel
, jede mit ihrer eigenen verwandten Ansicht und jeder erweitert eine abstract
Basisklasse BaseViewModel
.
In BaseViewModel
können wir gemeinsame Eigenschaften und/oder ICommand
Instanzen hinzufügen und die INotifyPropertyChanged
Schnittstelle implementieren. Da sie alle BaseViewModel
Klasse erweitern, können wir diese Eigenschaft in der MainViewModel
Klasse, die zu einem unserer Ansicht Modelle können eingestellt werden:
public BaseViewModel ViewModel { get; set; }
Natürlich würden Sie die INotifyPropertyChanged
Schnittstelle auf korrekt Implementierung werden Ihre Eigenschaften im Gegensatz zu diesem schnellen Beispiel. Jetzt in App.xaml
wir einige einfache DataTemplate
s erklären, die Ansichten mit den Ansicht Modelle zu verbinden:
<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
<Views:MainView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:PersonViewModel}">
<Views:PersonView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}">
<Views:CompanyView />
</DataTemplate>
jetzt, wo wir eine unserer BaseViewModel
Instanzen in unserer Anwendung zu verwenden, diese DataTemplate
s wird den Rahmen sagen, die angezeigt werden verwandte Ansicht stattdessen. Wir können sie wie folgt angezeigt:
<ContentControl Content="{Binding ViewModel}" />
So alles, was wir jetzt auf eine neue Ansicht wechseln tun müssen, die ViewModel
Eigenschaft aus der MainViewModel
Klasse zu setzen:
ViewModel = new PersonViewModel();
Schliesslich, wie wir Ändern Sie die Ansichten von anderen Ansichten? Nun, es gibt mehrere Möglichkeiten, dies zu tun, aber der einfachste Weg ist, eine Binding
aus der untergeordneten Ansicht direkt zu einer ICommand
in der MainViewModel
hinzuzufügen.Ich benutze eine angepasste Version des RelayComand
, aber Sie jede Art verwenden können, die Sie mögen und ich nehme an, dass Sie das Bild bekommen:
public ICommand DisplayPersonView
{
get { return new ActionCommand(action => ViewModel = new PersonViewModel(),
canExecute => !IsViewModelOfType<Person>()); }
}
In der untergeordneten Ansicht XAML:
<Button Command="{Binding DataContext.DisplayPersonView, RelativeSource=
{RelativeSource AncestorType={x:Type MainView}}, Mode=OneWay}" />
Das ist es! Genießen.
@ AndrasSebö, bei dieser Gelegenheit stimme ich Ihnen nicht zu. Während ich akzeptiere, dass dies keine große Frage ist, habe ich viel schlechter gesehen und ich glaube, dass es ziemlich klar ist, wonach der Benutzer sucht. – Sheridan
Nun die Frage ist: Wie kann ich die Ansicht von innerhalb einer Ansicht wechseln. – user2499088
Haben Sie einen guten Weg gefunden, dieses Problem anzugehen? – User1551892