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. uni-app自定义app端的扫码界面

    记得当时是在西班牙有这样的一个需求,需要自定义扫码页面,还需要加上西班牙文,当时是在一个组件里面找到了这样的一个方法,全文大部分使用的app端的Native里面的方法,记录一下,跑路了项目代码要删库了 ...

  2. SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现

    上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...

  3. 基于Vue的前后端分离项目实践

    一.为什么需要前后端分离 1.1什么是前后端分离  前后端分离这个词刚在毕业(15年)那会就听说过,但是直到17年前都没有接触过前后端分离的项目.怎么理解前后端分离?直观的感觉就是前后端分开去做,即功 ...

  4. CAD绘图效率低?教你4个CAD绘图技巧,绘图效率提升十倍

    CAD绘图一直是一个谜一样的存在,说它简单吧,很多人都无法完全精通,说它难吧,很多人也都自学成才了. 如何学好CAD绘图是个难题,但是老话说的好,只要思想不滑坡,办法总比困难多,掌握以下这些CAD绘图 ...

  5. Sqlite—数据库备份与恢复

    数据库备份 例如:备份 /www/wwwroot 下面的 task.db 数据库 1.进入数据库 [root@localhost ~]# sqlite3 /www/wwwroot/task.db 2. ...

  6. threejs 限制物件只能在指定平面上拖拽

    threejs提供有 DragController.js的例子来辅助拖拽 该例子可以在基于当前屏幕的x和y轴上拖拽物体,但是它不能影响z轴. 查看代码,可以在touchStart\mousedown下 ...

  7. .NET Core 3.0正式版发布

    是的,.NET Core 3.0正式版发布了,令人兴奋. WPF 其实,.NET Core 2.1开始已经是个很完善的版本,3.0又带来了什么呢?我站在我的使用角度来看,最最令人振奋的就是:能用WPF ...

  8. 大话设计模式Python实现-迭代器模式

    迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: #!/usr/bin/env python # - ...

  9. 利用PyInstaller打包exe文件

    前言 平常我们通过Python写完一些小脚本之后,如果使用不频繁的话,一般会选择在DOS界面直接跑脚本,或者在IDE中运行.但当我们需要频繁使用某些脚本,或者在没有Python环境的机器上也能顺利运行 ...

  10. UML简单介绍—类图详解

    类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...