在主窗口中包含的多个子视图中导航
本文关键字:视图 导航 窗口 包含 | 更新日期: 2023-09-27 17:58:43
我正在开发一个WPF MVVM应用程序,我需要有一个只有一个徽标的主窗口,并且它必须在其中显示子视图。我在主窗口中没有任何控件,所有控件都驻留在子视图中,例如下一步、返回、取消等按钮和一些文本块等。现在,如果用户选择子视图上的"下一步"按钮,我必须在主窗口中绘制或加载下一个子视图。如果单击"后退"按钮,我必须返回到上一个子视图。所以基本上我正在根据单击哪个按钮来更改子视图。此外,我为每个子视图维护不同的视图模型。现在的问题是我无法弄清楚如何将子视图链接到相应的视图模型。此应用程序类似于某些安装应用程序,其中根据用户单击的选择和按钮显示不同的对话框。我是这个 wpf 的新手,不想使用 MVVM 光、棱镜等。任何详细的帮助将不胜感激。提前谢谢。
将任何数据类型与 XAML 控件相关联的最简单方法之一是使用 DataTemplate
。因此,您可以简单地将类似这样的东西添加到您的Application.Resources
中,只要您没有在 DataTemplate
上设置 x:Key
属性,那么每当框架遇到视图模型的实例时,它们就会被显式应用:
<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
交换它们。
更新>>>
一般的想法是,您有一个MainViewModel
类,其中BaseViewModel
属性数据绑定到MainWindow.xaml
中的一个ContentControl
...导航控件也应处于MainWindow.xaml
中,而不是视图本身中。这样,MainViewModel
类负责在从MainWindow.xaml
接收导航Command
时将属性更改为相关的视图模型实例。