WPF MVVM导航视图

WPF MVVM导航视图

我有一个具有多个视图的WPF应用程序。我希望从视图1切换到视图2,从那里我可以切换到多个视图。因此,我希望在视图1上有一个按钮,在同一个窗口中加载view2。

我试过那些东西,但不能让它起作用。

从第一个链接来看,问题在于我不理解viewModellocator代码。他们调用CreateMain();函数,但是这个函数是在哪里定义的,以及如何从视图内部切换到另一个视图。


慕斯709654
浏览 857回答 3
3回答

qq_笑_17

首先,您不需要任何这些工具箱/框架来实现MVVM。可以这么简单.。假设我们有一个MainViewModel,和PersonViewModel和一个CompanyViewModel,每个视图都有各自的相关视图,并且每个视图都扩展为abstract基类BaseViewModel.在……里面BaseViewModel,我们可以添加公共属性和/或ICommand实例并实现INotifyPropertyChanged接口。因为它们都扩展了BaseViewModel类中,我们可以在MainViewModel类,该类可以设置为我们的任何视图模型:public&nbsp;BaseViewModel&nbsp;ViewModel&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}当然,您将实现INotifyPropertyChanged接口正确你的属性与此快速示例不同。现在进去App.xaml,我们声明一些简单的DataTemplates将视图连接到视图模型:<DataTemplate&nbsp;DataType="{x:Type&nbsp;ViewModels:MainViewModel}"> &nbsp;&nbsp;&nbsp;&nbsp;<Views:MainView&nbsp;/></DataTemplate><DataTemplate&nbsp;DataType="{x:Type&nbsp;ViewModels:PersonViewModel}"> &nbsp;&nbsp;&nbsp;&nbsp;<Views:PersonView&nbsp;/></DataTemplate><DataTemplate&nbsp;DataType="{x:Type&nbsp;ViewModels:CompanyViewModel}"> &nbsp;&nbsp;&nbsp;&nbsp;<Views:CompanyView&nbsp;/></DataTemplate>现在,无论我们用哪一种BaseViewModel在我们的应用程序中,这些实例DataTemplateS将告诉框架显示相关视图。我们可以这样展示:<ContentControl&nbsp;Content="{Binding&nbsp;ViewModel}"&nbsp;/>因此,我们现在要切换到新视图所需要做的就是设置ViewModel属性的MainViewModel班级:ViewModel&nbsp;=&nbsp;new&nbsp;PersonViewModel();最后,我们如何改变其他观点的观点?有几种可能的方法可以做到这一点,但最简单的方法是添加一个Binding直接从子视图到ICommand在MainViewModel..我使用自定义版本的RelayComand,但你可以使用你喜欢的任何类型,我猜你会得到图片:public&nbsp;ICommand&nbsp;DisplayPersonView{ &nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;new&nbsp;ActionCommand(action&nbsp;=>&nbsp;ViewModel&nbsp;=&nbsp;new&nbsp;PersonViewModel(),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canExecute&nbsp;=>&nbsp;!IsViewModelOfType<Person>());&nbsp;}}在子视图中,XAML:<Button&nbsp;Command="{Binding&nbsp;DataContext.DisplayPersonView,&nbsp;RelativeSource= &nbsp;&nbsp;&nbsp;&nbsp;{RelativeSource&nbsp;AncestorType={x:Type&nbsp;MainView}},&nbsp;Mode=OneWay}"&nbsp;/>就这样!好好享受吧。
打开App,查看更多内容
随时随地看视频慕课网APP