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

Rod*_*ero 5 wpf binding mvvm

我一直在通过Josh Smith 的文章学习 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>
Run Code Online (Sandbox Code Playgroud)

但是,我想要一些更通用的东西。我的意思是我的 mainWindow 不应该知道特定的 View 或特定的 ViewModel。它应该只知道它绑定到某些命令并具有显示“某些视图”的选项卡控件。包括Josh Smith 的文章在内的每个示例似乎都具有有限的视图和视图模型范围,这对于示例来说非常棒。

那么,我如何告诉我的 ContentControl 某个视图(及其相应的 viewModel)将会存在而不那么具体(不“烧录”到 mainView 的具体类型)?

最好的问候罗德里戈

PD。我尝试过使用基础 ViewModel 和基础视图,但它似乎不起作用。

Rac*_*hel 3

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

<ContentControl Content="{Binding CurrentPage}" />
Run Code Online (Sandbox Code Playgroud)

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

因此,当您单击类似 的内容时,如果继承自,HomePageCommand主 ViewModel 将执行。CurrentPage = new HomePageViewModel();HomePageViewModelViewModelBase

我不久前写了一些东西,如果你有兴趣的话,这里展示了一些示例