浏览主窗口中包含的多个子视图

时间:2014-04-17 15:34:46

标签: c# wpf mvvm

我正在开发一个WPF MVVM应用程序,我需要一个只有徽标的主窗口,它必须在其中显示子视图。我没有在主窗口中有任何控件所有控件都驻留在子视图中,例如按钮,如Next,Back,Cancel和一些文本块等。现在如果用户选择子视图上的Next按钮,我必须绘制或加载主窗口中的下一个子视图。如果单击“后退”按钮,则必须返回上一个子视图。所以基本上我根据点击的按钮更改子视图。此外,我正在为每个子视图维护不同的视图模型。现在的问题是我无法想象如何将子视图链接到各自的视图模型。此应用程序类似于某些安装应用程序,根据选择和用户点击的按钮显示不同的对话框。我是这个wpf的新手并且不想使用MVVM Light,Prism等。任何详细的帮助都将非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:2)

将任何数据类型与XAML控件相关联的最简单方法之一是使用DataTemplate。因此,您只需在Application.Resources中添加此类内容即可,只要您未在x:Key 上设置DataTemplate属性,那么他们就会只要遇到视图模型的实例,就可以由框架明确应用:

<DataTemplate DataType="{x:Type ViewModels:HomeViewModel}">
    <Views:HomeView />
</DataTemplate>
...
<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
    <Views:MainView />
</DataTemplate>

然后显示视图就像这样简单:

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

在代码背后或您的视图模型中:

YourViewModelProperty = new MainViewModel();

为视图模型创建基类通常很方便,然后为该类型的YourViewModelProperty罐创建,您将能够使用相同的属性和ContentControl来交换它们。


更新&gt;&gt;&gt;

一般的想法是,您有一个MainViewModel类,其中一个BaseViewModel属性数据绑定到ContentControl中的一个MainWindow.xaml ...导航控件也应该在MainWindow.xaml而不是观点本身。通过这种方式,MainViewModel类负责在从Command接收导航MainWindow.xaml时将属性更改为相关的视图模型实例。