导航的快速和肮脏的例子(这是在这里,而不是写在VS所以如果事情是拼写错误,请应用的修补程序):
,让我们创建我们的意见的分层描述:
public abstract Class ViewModelBase : INotifyPropertyChanged{}
public abstract Class ViewModelNavigationBase : ViewModelBase {}
public Class ViewModel1 : ViewModelNavigationBase {}
public Class ViewModel2 : ViewModelNavigationBase {}
public Class ViewModel3 : ViewModelNavigationBase {}
public Class MainViewModel : ViewModelBase
{
private ViewModelNavigationBase currentViewModel;
public ViewModelNavigationBase CurrentViewModel
{
get{return currentViewModel;}
set
{
currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
private const int numberOfPages = 3 ;
private int index;
private ViewModelNavigationBase[numberOfPages] pages;
....
... OnNavigateCommand()
{
index++;
index = index % numberOfPages;
CurrentViewModel = pages[index];
}
}
资源:
<local:MainViewModel x:Key="MainVm" />
<DataTemplate TargetType={x:Type local:ViewModel1}>
<local:View1 />
</DataTemplate>
<DataTemplate TargetType={x:Type local:ViewModel2}>
<local:View2 />
</DataTemplate>
<DataTemplate TargetType={x:Type local:ViewModel3}>
<local:View3 />
</DataTemplate>
X aml:
<Window x:Name="MainWindow"
DataContext={StaticResource MainVm}>
<StackPanel>
<ContentControl Content={Binding CurrentViewModel} />
<Button Content="Navigate" Command="{Binding NavigateCommand}"/>
</StackPanel>
</Window>
实际上,WPF应该如何工作:)您的应用程序由您创建的对象(ViewModels/Models)组成,您可以使用DataTemplates和UI对象来告诉WPF如何绘制应用程序。这与WinForms正好相反,您可以使用UI对象构建应用程序,并为它们提供所需的数据。 – Rachel
比我第二次回答的导航设施准确地参考了什么? –
我以前没有使用过的代码,但它似乎是完成同样的事情的框架。您将对象设置为“当前”页面,并使用“ViewModelLocator”来定位正确的视图来绘制页面。 – Rachel