Prism 6

简介

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中,模块目录用于指定要加载哪些模块,何时加载以及按什么顺序加载。模块目录由ModuleManagerModuleLoader组件使用,如果模块是远程的,则负责下载模块,将模块的程序集加载到应用程序域中,以及初始化模块。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的布局,而无需更改应用程序逻辑。许多常用控件可用作区域,允许视图自动显示在控件中,例如ContentControlItemsControlListBoxTabControl。可以以编程方式或自动方式在区域内显示视图。Prism还为实施区域导航提供支持。区域可以通过RegionManager组件由其他组件定位,该组件使用RegionAdapterRegionBehavior组件,以协调特定区域内的视图显示。
  • 导航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)的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. .NET Core使用RabbitMQ

    RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...

  2. python操作文件和目录查看、创建、删除、复制

    python内置了os模块可以直接调用操作系统提供的接口函数,os.name查询的是操作系统,‘nt’表示windows系统 >>> import os >>> o ...

  3. 扫描枪连接zebra打印机打印条码标签无需电脑

    在一些流水线生产的现场,需要及时打印条码标签,由于现场环境和空间限制,无法摆放电脑或者通过连接电脑来打印条码标签的速度太慢, 瑞科条码特提供了一套扫描枪直接连接条码打印机,扫描枪扫描条码之后直接打印输 ...

  4. AVProVideo 在android 真机使用经验分享

    AVProVideo 在 android 方面 如果想使用必须进行合理的设置:如图 发布的时候设置: 如果想使用代码替换播放视频: 第一步:设置  PlatformOptionsAndroid.ove ...

  5. VS2019 开发Django(四)------models

    导航:VS2019开发Django系列 继上篇我们匆匆迁移数据库成功之后,又花了一个晚上研究了Django的模型,这里的模型其实就是ORM模型中的Entity,.Net里边用的比较多的有Entity ...

  6. jQuery实现类似Chrome控制台可拖拽改变宽度的样式

    最近项目进程紧张,没法再愉快的网上冲浪了 因为项目需要实现一个页面上可拖拽改变div宽度的功能,类似效果如Chrome的右侧调试台样式: 大概思路为: 1.使用mousemove()方法,将鼠标的位置 ...

  7. 本地的个人web网站上线的全过程,供大家参考(PHP,简易的LAMP环境搭建)

    一 : 你需要准备的东西 1.本地能访问的网站,最好是改过host文件和apache的httpd-vhosts.conf,配置过本地域名的那种(减少传到线上出现的问题,文件路径不对呀啥的) 2.一个云 ...

  8. xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

    xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...

  9. python的学习大纲

    python基础部分 函数 初识函数 函数进阶 装饰器函数 迭代器和生成器 内置函数和匿名函数 递归函数 常用模块 常用模块 模块和包 面向对象 初识面向对象 面向对象进阶 网络编程 网络编程 并发编 ...

  10. Redis缓存NoSQL

    下面是一些关于Redis比较好的文章,因为篇幅较大,我就将其折叠起来了.不太喜欢分不同的笔记去记载,除非真的很多很多.所以本文不仅要对Redis做简单的介绍,还要分别介绍Redis中的五种结构,并会贴 ...