我一直在用Josh Smith's article学习MVVM模式,我想创建一个经典的布局,右边有一些链接(用命令管理),所以当我点击一个时,我可以向右边显示我的视图一个制表符控件(里面有一个ContentControl)。
当我将DataTemplate与我希望在屏幕上显示的特定View和ViewModel一起使用时,这很简单。
<!-- this section into my MainWindow's resources file -->
<DataTemplate xmlns:vm='clr-namespace:WpfFramework.ViewModels'
xmlns:vw='clr-namespace:WpfFramework.Views'
DataType="{x:Type vm:MySpecificViewModel }" >
<vw:MySpecificView />
</DataTemplate>
但是,我想要更通用的东西。我的意思是我的mainWindow不应该知道特定的View或特定的ViewModel。它应该只知道它绑定到某些命令并且有一个显示“某些视图”的选项卡控件。包括Josh Smith's article在内的每个样本似乎都具有有限的视图和视图模型,这对于样本来说非常好。
那么,我怎么能告诉我的ContentControl一些视图(及其相应的viewModel)会不会那么具体(没有“烧”到mainView中的具体类型)?
最好的问候 罗德里戈PD。我已尝试使用ViewModel和Base View,但它似乎不起作用。
答案 0 :(得分:3)
在主视图中,将ContentControl
绑定到通用ViewModelBase
属性
<ContentControl Content="{Binding CurrentPage}" />
CurrentPage
将在主ViewModel中定义为ViewModelBase
对象,并切换页面,只需将CurrentPage
设置为您想要的任何内容。
因此,当您点击HomePageCommand
之类的内容时,只要CurrentPage = new HomePageViewModel();
继承自HomePageViewModel
,主ViewModel就会执行ViewModelBase
。
我刚才写了一些内容,如果你感兴趣的话会显示一些样本here