Prism V2之旅(1)

本文介绍了Prism框架的基础概念,包括被引导的Windows窗体Shell、被附加的内容区域Region及被拆分的模块Module,帮助读者了解如何使用Prism框架开发复杂的WPF应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

    如果你在开发wpf程序,应该听说过The Composite Application Guidance for WPF(以下简称prism)

    总而言之,prism是帮助你开发复杂的wpf应用程序的。希望在看完此系列教程以后能对你有所帮助.

    从去年正式版发布至今,将近快半年了.silverlight 2正版的推出.prism也开始支持silverlight,而且这次是同时支持wpf和silverlight.这样便统一了wpf和silverlight的编程,代码的移植也更加的方便.现在prism最新的版本是Prism V2 - Drop 8.相对于第一个版本发生了一些变化.本文则基于Prism V2 - Drop 8这个版本进行介绍.如果你还在用7月份的那个版本可以看周银辉写的教程.

以下说明三个最基础的概念.

 

一.被引导的Windows窗体Shell

 

wpf程序在启动时,需要一个宿主容器,一般情况下是System.Windows.Window,以下是一个刚创建的窗体.

<Window x:Class="HelloWorldSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        
    </Grid>
</Window>

 

默认情况下,System.Windows.Application会通过设置StartupUri来运行主窗体.

<Application x:Class="HelloWorldSample.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml">
</Application>

 

接着随着prism框架的加入,运行主窗体的方式改变了.因为prism要在窗体运行之前做一堆事情,来为框架可以做的事情做铺垫.所以我们要去掉StartupUri,手动启动窗体. prism通过一个名为Bootstrapper类作为引导程序,这里我们先不管他做了什么,只知道他起了程序的引导作用.

通过Bootstrapper的引导,这个窗体就不再仅仅是一个单纯的窗体了,这个窗体我们也可以称为Shell,也可以理解为一个壳的意思.

二.被附加的内容区域Region

 

以asp.net中的母版页为例.

我们做网站之前总要先布局,那就得定模板,下图大家应该很熟悉,目的就是以母版页当容器,然后在定义的ContentPlaceHolder区域中塞内容.

image

一般情况下,定义了母版页以后,必定要其他Page来套用此母版页

image

 

 

这种做法本身很好,用wpf程序来实现也可以实现(可以参考此文),但比较麻烦.web程序与客户端程序有一个本质的区别,web是无状态的,客户端程序就没有这方面的问题.

假设web是有状态的(假设哦),可以以用户控件替代,以aspx页面为母版页,照样定义容器,往里面塞用户控件.

这种做法,现在的ajax程序应该很流行.

image

 

回到主题,prism框架通过附加属性的方式给Shell定义自定义区域,标题说是附加的内容区域,如下代码,

通过附加属性的方式给ItemsControl定义了一个Region,ItemsControl就变成这个Region的容器了.

这里的Region与asp.net母版页的ContentPlaceHolder的意义是相同的,只不过实现方式不同罢了.

<Window x:Class="HelloWorldSample.Shell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:cal="http://www.codeplex.com/CompositeWPF"
    Title="Composite Application Library Sample" Width="400" Height="300">
    <ItemsControl cal:RegionManager.RegionName="MainRegion"/>
</Window>

 

注意:在这里通过RegionManager附加属性RegionName注册的区域的功能,是在该窗体实例化之前,通过Bootstrapper提供的,这就是上面的铺垫作用.

三.被拆分的模块Module

     定义好Region内容区域以后,可以在Region中加载不同的模块的用户控件.每个模块都有着不同功能,一个功能强大的应用程序就是由不同的模块组成的.将应用程序的不同功能,拆分成不同的小模块开发,复杂度明显就会降低.

好,到了这里讲明了三个点

1.Shell,主应用程序容器,prism功能的基石

2.Region,我们且称之为内容区域,可以提供各个模块加载所需的视图(即用户控件)

3.Module,程序的组成模块.

 

有了以上三个概念以后,我们便可以开始prism之旅了,如果你对以上概念还不是很清晰,没有关系。以后会慢慢介绍.已经在用此框架的朋友,发现写错了请指出.下篇让我们一起来探索Region的使用。

### WPFPrism 框架的使用指南 #### 1. Prism 框架简介 Prism 是由 Microsoft 推出的一个开源框架,旨在为 WPF 和其他 .NET 平台提供模块化的解决方案[^2]。该框架的核心理念是通过 MVVM(Model-View-ViewModel)模式实现应用的分离关注点设计,从而提升代码的灵活性、可维护性和可测试性。 #### 2. 主要功能特点 Prism 提供了一系列工具和机制来简化复杂的应用程序开发过程: - **模块化开发**:允许将应用程序拆分为多个独立的功能模块,便于团队协作和后期扩展。 - **依赖注入容器**:支持多种 DI 容器(如 Unity、Autofac),用于管理对象的创建和生命周期[^4]。 - **事件聚合器**:实现了松耦合的消息传递机制,使得不同组件之间可以安全地通信而不需直接引用彼此。 - **导航服务**:提供了强大的视图切换能力,能够定义复杂的 UI 流程逻辑[^4]。 #### 3. 开发环境准备 在开始之前,需要安装 Visual Studio 或者其他兼容 IDE,并确保已启用“.NET Desktop Development”工作负载选项。此外还需要下载并引入 NuGet 包 `Prism.Wpf` 到您的项目当中: ```bash Install-Package Prism.Wpf ``` 或者如果您正在使用 dotnet CLI 工具,则可以通过如下命令完成相同操作: ```bash dotnet add package Prism.Wpf ``` #### 4. 配置基本结构 一个典型的基于 PrismWPF 应用通常包含以下几个部分: - **Bootstrapper/Startup Class**: 负责初始化整个应用程序以及设置必要的运行时参数; - **Modules**: 表示各个业务领域内的子系统集合体; - **Views & ViewModels**: 对应于用户界面及其背后的数据绑定源文件夹; 下面展示了一个简单的启动类例子: ```csharp public class Bootstrapper : UnityBootstrapper { protected override DependencyObject CreateShell() { return Container.Resolve<MainWindow>(); } protected override void InitializeShell() { base.InitializeShell(); Application.Current.MainWindow.Show(); } } ``` 此段代码片段展示了如何重写默认行为以自定义 Shell 创建流程。 #### 5. 实践案例分析 对于初学者来说,可以从官方样例仓库 [Prism-Samples-Wpf](https://github.com/PrismLibrary/Prism-Samples-Wpf) 学习实际应用场景下的最佳实践方法[^1]。这里涵盖了从基础概念到高级特性的全面覆盖范围,非常适合用来加深理解理论知识的同时积累实战经验。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值