WPF(2)概述Prism框架1

序言

做项目是提升个人能力最快的方式。

为什么要使用Prism框架?

Prism的出现正是出于构建一个:可重复利用的、可扩展的、灵活的、可以团队开发的、高质量的应用程序提供了一个很好的解决方案。

Prism框架中一些非常重要的概念

1、Prism思想是模块化编程,我将主界面拆分为四个模块(A、B、C、D)。

2、模块之间不能互相引用,也就是解耦了。

MVVM

说起这个MVVM模型,就不得不说MVC框架。

将整个前端页面分成View,Controller,Modal,视图上发生变化,通过Controller(控件)将响应传入到Model(数据源),由数据源改变View上面的数据。

整个过程看起来是行云流水,业务逻辑放在Model当中,页面渲染逻辑放在View当中,但在实际运用上却存在一个问题:那就是MVC框架允许View和Model直接进行通信!!

换句话说,View和Model之间随着业务量的不断庞大,会出现蜘蛛网一样难以处理的依赖关系,完全背离了开发所应该遵循的“开放封闭原则”。

MVVM(Model–View–Viewmodel)是一种软件架构模式。

简单的讲,MVVM是MVC的改进版。我们都知道MVC软件架构模式是苹果推荐的开发模式。

MVC中的M就是单纯的从网络获取回来的数据模型,V指的我们的视图界面,而C就是我们的ViewController。

在其中,ViewController负责View和Model之间调度,View发生交互事件会通过target-action或者delegate方式回调给ViewController,与此同时ViewController还要承担把Model通过KVO、Notification方式传来的数据传输给View用于展示的责任。随着业务越来越复杂,视图交互越复杂,导致Controller越来越臃肿,负重前行。脏活累活都它干了,到头来还一点不讨好。福报修多了的结果就是,不行了就重构你,重构不了就换掉你。

来一张斯坦福老头经典的MVC架构图。

所以为了解决这个问题,MVVM就闪亮登场了。他把View和Contrller都放在了View层(相当于把Controller一部分逻辑抽离了出来),Model层依然是服务端返回的数据模型。而ViewModel充当了一个UI适配器的角色,也就是说View中每个UI元素都应该在ViewModel找到与之对应的属性。除此之外,从Controller抽离出来的与UI有关的逻辑都放在了ViewModel中,这样就减轻了Controller的负担。

我简单的画了下MVVM的架构图。

概念

private DataGridViewModel ViewModel => DataContext as DataGridViewModel;

 Mode=OneWay

1.OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。

2.OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。

3.TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。

public virtual void OnNavigatedTo(NavigatedToEventArgs e, Dictionary<string, object> viewModelState);

public virtual void OnNavigatingFrom(NavigatingFromEventArgs e, Dictionary<string, object> viewModelState, bool suspending);

使用Microsoft.Practices.Unity 依赖注入

豆瓣小组

官网

 

Prism 简介

Prism 6.3,其中 WPF 平台的项目有这么多个:

  • Prism.Wpf
  • Prism.Autofac
  • Prism.DryIoc
  • Prism.Mef
  • Prism.Ninject
  • Prism.StructureMap
  • Prism.Unity

相比 Prism 6.3,刚刚发布的 8.0 已经好很多了(虽然还是有很多个项目),例如 WPF 平台的项目已经大幅删减,只保留了 Prism.WpfPrism.DryIocPrism.Unity

也就是说现在 Prism 只支持 DryIoc 和 Unity 两种 IOC 容器。这样一来 Prism 项目的结构就很清晰了。

以 WPF 为例,核心的项目是 Prism.Core,它提供实现 MVVM 模式的核心功能以及部分各平台公用的类。然后是 Prism.Wpf,它提供针对 Wpf 平台的功能,包括导航、弹框等。最后由 Prism.Unity 指定 Unity 作为 IOC 容器。

 

Prism之使用EventAggregation进行模块间通信
Prism之Region(2) 
Prism之Region(1) 
Prism之Module
Prism之Bootstrapper
Prism简介
 

 

资料

https://www.bilibili.com/video/BV1it4y1G7q7/?spm_id_from=333.337.search-card.all.click&vd_source=a56db24cb8cab4dd8153f9a519787c89

https://www.cnblogs.com/ryzen/p/12610249.html

开源--豆瓣小组UWP

豆瓣小组官网

https://github.com/PrismLibrary/Prism

https://www.cnblogs.com/dino623/p/using_prism_core.html

posted @ 2020-03-20 20:36  ~沐风  阅读(2659)  评论(0编辑  收藏  举报