在主窗口中包含的多个子视图中导航

本文关键字:视图 导航 窗口 包含 | 更新日期: 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时将属性更改为相关的视图模型实例。