WPF PRISM开发入门一

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。这个系列的博客将选择PRISM 4.1版本来讲解。可以从微软官网上下载到PRISM 4.1相关内容。将下载下来的文件解压开:

新建一个WPF解决方案如下:

解决方案中包含两个工程,GetStartedPrismWPF是一个WPF项目,GetStartedPrismWPF.MainModule是一个类库项目。这两个项目中都同时添加下面Prism相关的Dll,

在GetStartedPrismWPF.MainModule类库中需要额外引用PresentationCore,PresentationFramework,ReachFramework,System.Xaml这4个WPF相关的类库。

GetStartedPrismWPF工程中删除MainWindow.xaml文件,新建一个Shell.xaml窗体文件,XAML代码如下:

<Window x:Class="GetStartedPrismWPF.Shell"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:prism="http://www.codeplex.com/prism"
        xmlns:local="clr-namespace:GetStartedPrismWPF"
        mc:Ignorable="d"
        Title="GetStarted Prism for WPF" Height="300" Width="300">
    <Grid>
        <ContentControl prism:RegionManager.RegionName="MainRegion"/>
    </Grid>
</Window>

添加一个PrismGetStartedBootstrapper类,代码如下:

using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.Prism.UnityExtensions;
using System.Windows;

namespace GetStartedPrismWPF
{
    public class PrismGetStartedBootstrapper : UnityBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return this.Container.TryResolve<Shell>();
        }

        protected override void InitializeShell()
        {
            base.InitializeShell();

            Application.Current.MainWindow = (Window)this.Shell;

            Application.Current.MainWindow.Show();
        }

        protected override void ConfigureModuleCatalog()
        {
            base.ConfigureModuleCatalog();

            ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;

            moduleCatalog.AddModule(typeof(MainModule.GetStartedPrismWPFMainModule));
        }
    }
}

打开App.xaml文件,删除StartupUri的代码,在后台代码中添加:

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            PrismGetStartedBootstrapper bootstrapper = new PrismGetStartedBootstrapper();

            bootstrapper.Run();
        }

上面两段代码的意思是将主窗体设置为Shell窗体。
下面看GetStartedPrismWPF.MainModule中的代码,新建一个UserControl,命名为GetStartedPrismView,XAML代码如下:

<UserControl x:Class="GetStartedPrismWPF.MainModule.Views.GetStartedPrismView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:GetStartedPrismWPF.MainModule.Views"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <TextBlock Text="Prism for WPF Getstarted" FontSize="16" />
    </Grid>
</UserControl>

很简单,就一句话显示一段文字。新建一个GetStartedPrismWPFMainModule,集成自IModule,

    public class GetStartedPrismWPFMainModule : IModule
    {
        private readonly IRegionViewRegistry regionViewRegistry;

        public GetStartedPrismWPFMainModule(IRegionViewRegistry registry)
        {
            this.regionViewRegistry = registry;
        }

        public void Initialize()
        {
            regionViewRegistry.RegisterViewWithRegion("MainRegion", typeof(Views.GetStartedPrismView));
        }
    }

这里会把GetStartedPrismView这个UserControl注册到MainRegion这样一个占位符上,而这个占位符在WPF工程中Shell窗体XAML代码中出现过,在Shell中,我们先定义好这样一个占位符,后续可以对他填充Module。
此时运行这个项目,运行效果如下:

这个时候我们来对PRISM的基础架构做一个简单的描述。

Shell: 顶级窗口,就像一个空荡荡的舞台,Shell本身不包含内容,他的功能都是通过Module来实现的;

Bootstrapper: 应用程序的入口点,就像一个工厂的调度,需要完成很多协调事情;

Region: 内容区域,类似于一个占位符,先把坑占了,至于上面的蹲坑的人是可以换的;

Module: 真正实现业务功能的东西,是View,数据,模型组成的集合,一个应用程序中可以根据复杂程度分很多Module;

用一个电影院来举例子:Shell就是一个剧院,里面空空荡荡的演出厅就是Region,Bootstrapper就是剧场运营部门,安排演出单位的引入和演出安排及演出厅之间的资源协调;Module就是各个演出剧。

感谢您的阅读!代码点击这里下载。

时间: 2024-08-06 20:04:35

WPF PRISM开发入门一的相关文章

WPF PRISM开发入门二(Unity依赖注入容器使用)

这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点击这里下载. 运行效果如下: 下面将引入Unity类库,使用Unity来生成需要的对象实例. 先查看一下CalculateRelpLoop类, public class CalculateRelpLoop : ICalculateRelpLoop { ICalculateService _calcu

ArcGIS API for Silverlight/ 开发入门 环境搭建

Silverlight/ 开发入门 环境搭建1 Silverlight SDK下载ArcGIS API for Microsoft Silverlight/WPF ,需要注册一个ESRI Gloab 账户.下载地址http://resources.esri.com/arcgisserver/apis/silverlight/2 开发环境:1)Visual Studio 2008 SP1 或者 Visual Web Developer Express with SP1 下载地址 :Visual S

WPF MVVM从入门到精通4:命令和事件

原文:WPF MVVM从入门到精通4:命令和事件 ? WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 WPF MVVM从入门到精通4:命令和事件 WPF MVVM从入门到精通5:PasswordBox的绑定 WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定 WPF MVVM从入门到精通7:关闭窗口和打开新窗口 WPF MVVM从入门到精通8:数据验证 完整示例代码下载LoginD

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

ArcGIS API for Silverlight开发入门准备

原文:ArcGIS API for Silverlight开发入门准备 微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich Internet Application). ArcGIS API for Silverlight 能够让的Silverlight应用程序具有集成ArcGIS Server.ESRI MapIt和Bing Maps服务的能力.利用 ArcGIS Server 和Bing Maps资源,比如说Maps.Loca

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

Android Wear 开发入门

大家好,我是陆嘉杰,我是一名Android开发者.我想和大家进行一些技术交流,希望越来越多的人能和我成为好朋友. 大家都知道,智能手表是下一个开发的风口,而这方面的技术又属于前沿,所以和大家分享下Android Wear的开发流程. 首先,我推荐大家使用Android Studio来进行Wear的开发,这也是谷歌推荐的,本次讲授过程也将以Android Studio作为开发集成环境进行. 下面我们来创建Android Wear项目. 请注意,Android Wear项目中同时包含mobile和w

UWP开发入门(一)——SplitView

接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先SplitView是Win10 UWP新增的控件,以前虽然可以通过DockPanel模拟出类似的效果,但又哪里及得上M$原生支持的SplitView快捷方便呢. 至于为什么说SplitView适合顶层导航,可以参考目前尚为数不多的UWP APP,比如微博.QQ和网易等Win10 APP,基本都是通过S