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