Prism_简介(1)
Prism 6
- Introduction介绍
- Initializing初始化
- Managing-Dependencies管理依赖
- Modules模块
- Implementing-MVVM实时MVVM
- Advanced-MVVM先进MVVM
- Composing-the-UI组合UI
- Navigation导航
- Communication通讯
- Deploying部署
- Appendix-A-Glossary附录词汇
- Appendix-B-Patterns附录模式
- Appendix-C-Prism-Library附录Prism库
- Appendix-D-Extending-Prism附录扩展Prism
- Appendix-E-Click-Once
简介
Prism需要.Framework4.5,包含MVVM(Model-View-ViewModel)模式,Navigation,和MEF(Managed Extensibility Framework)
前期准备
学习Prism需要一些WPF的概念,需要了解和熟悉
- XAML(Extensible Application Markup Language)。在WPF应用程序中以声明方式定义和初始化用户界面的语言。
- 数据绑定(Binding)。这就是UI元素如何连接到WPF中的组件和数据。
- 资源(Resources)。这些是在WPF中创建和管理样式,数据模板和控件模板的方式。
- 命令(Commands)。这些是用户手势和输入连接到控件的方式。
- 用户控件(User Controls)。这些是提供自定义行为或自定义外观的组件。
- 依赖属性(Dependency properties)。这些是公共语言运行时(CLR)属性系统的扩展,用于启用属性设置和监视,以支持数据绑定,路由命令和事件。
- 行为(Behaviors)。行为是封装交互功能的对象,可以轻松应用于用户界面中的控件。
关键概念
Prism提供了您可能不熟悉的功能和设计模式,特别是如果您是设计模式和复合应用程序开发的新手。本节简要概述了Prism背后的主要概念,并定义了您将在整个文档和代码中使用的一些术语。
- 模块(Modules)。模块是可以独立开发,测试和(可选)部署的功能包。在许多情况下,模块由不同的团队开发和维护。典型的Prism应用程序由多个模块构建。模块可用于表示特定的业务相关功能(例如,配置文件管理),并封装实现该功能所需的所有视图,服务和数据模型。模块还可用于封装可在多个应用程序中重用的常见应用程序基础结构或服务(例如,日志记录和异常管理服务)。
- 模块目录(Module catalog)。在复合应用程序中,必须由主机应用程序在运行时发现和加载模块。在Prism中,模块目录用于指定要加载哪些模块,何时加载以及按什么顺序加载。模块目录由ModuleManager和ModuleLoader组件使用,如果模块是远程的,则负责下载模块,将模块的程序集加载到应用程序域中,以及初始化模块。Prism允许以不同方式指定模块目录,包括以编程方式使用代码,以声明方式使用XAML或使用配置文件。如果需要,您还可以实现自定义模块目录。
- 壳(Shell)。shell是加载模块的宿主应用程序。shell定义了应用程序的整体布局和结构,但它通常不知道它将托管的确切模块。它通常实现常见的应用程序服务和基础结构,但大多数应用程序的功能和内容都是在模块中实现的。shell还提供顶级窗口或可视元素,然后将托管由加载的模块提供的不同UI组件。
- 视图(Views)。视图是UI控件,用于封装应用程序的特定功能或功能区域的UI。视图与MVVM模式结合使用,MVVM模式用于在UI与应用程序的表示逻辑和数据之间提供关注点的清晰分离。视图用于封装UI并定义用户交互行为,从而允许独立于底层应用程序功能更新或替换视图。视图使用数据绑定与视图模型类交互。
- 视图模型(View models)。视图模型是封装应用程序的表示逻辑和状态的类。它们是MVVM模式的一部分。View模型封装了应用程序的大部分功能。视图模型定义属性,命令和事件,视图中的控件可以对其进行数据绑定。
- 模型(Models)。模型类封装了应用程序数据和业务逻辑。它们用作MVVM模式的一部分。模型封装了数据以及任何相关的验证和业务规则,以确保数据的一致性和完整性。
- 命令(Commands)。命令用于封装应用程序功能,允许独立于应用程序的UI定义和测试它们。它们可以在视图模型中定义为命令对象或命令方法。Prism提供DelegateCommand类和CompositeCommand类。后者用于表示一起调用的命令集合。
- 地区(Regions)。区域是在应用程序的UI(在shell或视图中)中定义的逻辑占位符,其中显示视图。区域允许更新应用程序UI的布局,而无需更改应用程序逻辑。许多常用控件可用作区域,允许视图自动显示在控件中,例如ContentControl,ItemsControl,ListBox或TabControl。可以以编程方式或自动方式在区域内显示视图。Prism还为实施区域导航提供支持。区域可以通过RegionManager组件由其他组件定位,该组件使用RegionAdapter和RegionBehavior组件,以协调特定区域内的视图显示。
- 导航(Navigation)。导航定义为应用程序通过其与应用程序或内部应用程序状态更改进行交互而更改其UI的过程。Prism支持两种导航样式:基于状态的导航,其中现有视图的状态被更新以实现简单的导航场景;以及视图切换导航,其中创建新视图并在应用程序的UI内替换旧视图。视图切换导航使用基于统一资源标识符(URI)的导航机制与Prism区域相结合,以允许实现灵活的导航方案。
- 事件聚合(EventAggregator)。复合应用程序中的组件通常需要以松散耦合的方式与应用程序中的其他组件和服务进行通信。为了支持这一点,Prism提供了EventAggregator组件,它实现了pub-sub事件机制,从而允许组件发布事件和其他组件来订阅这些事件,而不需要引用另一个事件。所述EventAggregator经常被用来允许在不同的模块中定义的部件彼此通信。
- 依赖注入容器(Dependency injection container)。整个Prism使用依赖注入(DI)模式来允许管理组件之间的依赖关系。依赖注入允许在运行时实现组件依赖性,并且它支持可扩展性和可测试性。Prism旨在与Unity或MEF一起使用,或通过ServiceLocator与任何其他依赖注入容器一起使用。
- 服务(Services)。服务是封装非UI相关功能的组件,例如日志记录,异常管理和数据访问。服务可以由应用程序定义,也可以在模块内定义。服务通常在依赖注入容器中注册,以便它们可以根据需要定位或构造,并由依赖于它们的其他组件使用。
- 控制器(Controllers)。控制器是用于协调要在应用程序UI中的区域中显示的视图的构造和初始化的类。控制器封装了表示要显示哪些视图的表示逻辑。控制器将使用Prism的视图切换导航机制,该机制提供可扩展的基于URI的导航机制,以协调区域内视图的构造和放置。Application Controller模式定义了映射到此职责的抽象。
- 引导程序(Bootstrapper)。该引导程序组件应用程序使用来初始化各个棱镜组件和服务。它用于初始化依赖注入容器,以便向其注册任何应用程序级组件和服务。它还用于配置和初始化模块目录以及shell的视图和视图模型或演示者。
Prism的设计使您可以单独使用任何前述功能和设计模式,也可以根据您的要求和应用场景一起使用。您可以以任意组合使用MVVM模式,模块化,区域,命令或事件,而无需采用所有这些模式。当然,如果您想充分利用分离关注点和松散耦合提供的好处,您通常会将Prism的许多功能和设计模式相互结合使用。下图显示了典型的Prism应用程序体系结构,并展示了Prism的所有各种功能如何在多模块复合应用程序中协同工作。

使用Prism库的典型复合应用程序架构
大多数Prism应用程序由一个shell应用程序组成,该应用程序定义用于显示顶级视图的区域和可由加载的模块访问的共享服务。shell定义了一个合适的目录,以指定在启动时加载哪些模块(如果适用)。还定义了依赖注入容器,其允许在运行时实现组件依赖性。应用程序启动时,Bootstrapper在容器中注册共享服务和组件。
各个模块封装了整个应用程序功能的一部分,并使用分离的表示模式(如MVVM)定义视图,视图模型,模型和服务组件。加载模块时,模块中定义的视图将显示在shell定义的区域内。初始化完成后,用户然后使用基于状态或视图切换的导航在应用程序内导航,以协调应用程序区域内的新视图的可视更新或显示。
Prism_简介(1)的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- SSM整合框架(基于IDEA的配置)
Pom文件 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http:/ ...
- Java并发之synchronized关键字深度解析(二)
前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实 ...
- 松软科技Web课堂:JavaScript 类型转换
Number() 转换数值,String() 转换字符串,Boolean() 转换布尔值. JavaScript 数据类型 JavaScript 中有五种可包含值的数据类型: 字符串(string) ...
- java正则表达式大全(常用)
一.校验数字的表达式 数字:^[-]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(|[-][-]*)$ 非零开头的最多 ...
- [20191218]降序索引疑问4.txt
[20191218]降序索引疑问4.txt --//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.--//我感觉有点奇怪,为什么开发 ...
- ZKWeb网页框架2.2.1正式发布
2.2.1 更新的内容有 改进 EFCore 支持 支持自动 json 序列化字段 (通过 WithSerialization 选项) 支持懒加载 更新后 EFCore 可以使用所有默认插件 (ZKW ...
- 拓展 centos 7
查看端口的占用情况 Centos6/contos7(ECS) 使用 netstat 查询系统上有多少TCP 多少UDP会话 netstat -tun -t: tcp -u: udp -a: all 表 ...
- jvm虚拟机笔记<三> 类文件结构与类加载机制
java虚拟机具有语言无关系,它只和“class文件“这种特定的二进制文件格式绑定. 不同语言的编译器将对应的程序编译成字节码文件(*.class),送给jvm执行. class文件本质上就是一张表, ...
- 字节跳动——IT技术工程师面试题
.自我介绍 .项目介绍 .争对个人项目进行提问 .场景模拟 .1如何知道用户的指定视频(类似于QQ发视频)的服务是正常的 .使用appum进行自动化测试 .使用bat脚本获取进程状态,然后定时发送em ...
- Redis面试篇 -- Redis常见性能问题和解决方案?
master最好不要做任何的持久化工作,如RD内存快照或者AOF日志文件: 如果数据比较重要,某个slave开始AOF备份数据,策略设置为每秒同步1次: 为了主从复制的速度和连接的稳定性,master ...