使用MVVM将视图动态绑定到ContainerControl中

时间:2011-07-07 14:41:49

标签: wpf mvvm binding

我一直在用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,但它似乎不起作用。

1 个答案:

答案 0 :(得分:3)

在主视图中,将ContentControl绑定到通用ViewModelBase属性

<ContentControl Content="{Binding CurrentPage}" />

CurrentPage将在主ViewModel中定义为ViewModelBase对象,并切换页面,只需将CurrentPage设置为您想要的任何内容。

因此,当您点击HomePageCommand之类的内容时,只要CurrentPage = new HomePageViewModel();继承自HomePageViewModel,主ViewModel就会执行ViewModelBase

我刚才写了一些内容,如果你感兴趣的话会显示一些样本here