🧭 WPF MVVM入门系列教程
- 一、MVVM模式介绍
- 二、依赖属性
- 三、数据绑定
- 四、ViewModel
- 五、命令和用户输入
- 六、ViewModel案例演示
🍠 WPF MVVM进阶系列教程
- 一、对话框
- 二、数据验证
- 三、使用依赖注入(Dependency Injection)
- 四、ViewModel通信
⌨️ WPF MVVM实战系列教程
- 一、Prism框架介绍
- 二、使用Visual Studio 创建Prism项目
- 三、创建Bootstrapper/启动器
- 四、区域导航
区域(Region)
在Prism中,引入了一个新的概念,叫Region(区域)。
Region 可以理解为 WPF 界面上的 “占位容器”,可以把不同的 View(视图)动态加载到这个容器中,无需在 XAML 中硬编码绑定,这是 Prism 实现模块化、松耦合 UI 的关键。

假设我们定义了两个Region,分别为Region1和Region2。
我们可以动态加载View(视图)到这两个Region里。
肯定有小伙伴会问,在WPF中,Frame控件也可以实现导航的功能,
是的,所以这里我们对比一下Frame和Region的区别
| Frame(WPF原生) | Region(Prism) | |
|---|---|---|
| 核心定位 | 页面(Page)导航控件 | 任意View的动态加载/切换容器 |
| 支持的视图类型 | 仅支持Page类型 |
支持任意UIElement(UserControl、Grid等) |
| 导航方式 | 基于XAML文件路径(如frame.Navigate(new Uri("Page1.xaml", UriKind.Relative))) |
基于View名称/类型(松耦合,无硬编码路径) |
| 模块化支持 | 弱,需手动管理页面与模块的关联 | 强,与Prism Module深度集成,天然支持模块化 |
| 生命周期 | 仅简单的导航事件(Navigated、Navigating) | 完整的导航生命周期(INavigationAware接口) |
| 多视图管理 | 仅支持单页面显示,无多视图激活/切换机制 | 支持多视图(TabControl/ItemsControl作为Region),可激活/停用指定View |
| 依赖注入 | 原生不支持,需手动实例化Page并传参 | 与Prism容器(Unity/DryIoc)深度集成,自动注入ViewModel/服务 |
| 参数传递 | 仅支持简单对象传参(Navigate的object参数) | 支持强类型参数(NavigationParameters),可在生命周期中获取 |
| 复用性 | 页面实例默认每次导航重建(可手动缓存) | 可通过IsNavigationTarget |
如何创建Region
1、引入Prism命名空间
1 xmlns:prism="http://prismlibrary.com/"
2、增加一个ContentControl
使用RegionManager.RegionName附加属性给区域命名
1 <ContentControl prism:RegionManager.RegionName="ContentRegion" />
完整代码如下所示
1 <Window x:Class="Regions.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 Title="Shell" Height="350" Width="525"> 6 <Grid> 7 <ContentControl prism:RegionManager.RegionName="ContentRegion" /> 8 </Grid> 9 </Window>