wpf框架模型分析

一、MVVM模式介绍:

  在网上看过很多的MVVM中各块的介绍,感觉很混乱。找到如下的描述感觉很合理,也很好理解(https://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx)。

二、模式分析

  在项目中使用这个模型,感觉有2点需要理解透,不然项目运行中肯定得乱套。

  • 如上图描述的模块的角色和职责。

  上面描述的很清楚了,但是几点地方总结下:

  1)有些地方将Model看成是只有数据的对象,但是这里显然不是。

  2)View 的Ui Logic指的是控件自己的一些显示逻辑,比如某些动画。(不知道其他怎么理解的,后续我们会把窗口的创建等都放在这里)。

  3)ViewModel的界面呈现逻辑有时候容易和Model的业务逻辑混在一起。

  • 模块之间的通信。

  模块通信包括View和ViewModel、ViewModel和ViewModel、ViewModel和Model之间的通信。

三、项目分析

1、需求:

1) 窗口统一管理,自动维护窗口及子窗口的生命周期。同时包括模态及非模态窗口。

2) 分离界面,界面逻辑,后台呈现逻辑,不包括其他界面或模块逻辑,界面职责明确独立。

3) 界面生命周期检测,业务逻辑处理与生命周期同步,即界面销毁不响应界面逻辑处理。

4) 窗口业务逻辑之间的通信传递便利,降低通信的代码成本。

5) 适应WPF的特性。比如binding,Command之类的。

2、分析

1)、父窗口与子窗口的生命周期同步

在wpf里,子窗口和父窗口设置ower关系存在如下问题:

父窗口关闭,方法内的模态窗口也会关闭。只要设置owner属性。必须在父窗口关闭之前手动关闭,否则窗口会卡住。

父窗口关闭,非模态窗口也会一起关闭,只要设置owner属性。任务栏问题,只显示父窗口的。

所以需要自建窗口管理模块管理子窗口的销毁。

2)、MVVM模式分析

让UI界面与逻辑能够很好地分离又协同工作,调研MVVMLight,使用binging、Command和Messenger可以达到以上目标。

四、模型设计

  通过以上的分析项目中使用的模型如下。

1、Window Manager

工厂化窗口的创建,窗口销毁的反注销,父子窗口的生命周期绑定,以及窗口的业务逻辑的反注册。

2、View

MVVM模式中的第一个V,包括窗口及子视图。所有的与界面元素有关的内容,请放在此处操作。

一般情况下,View和ViewModel是一一对应的,生命周期一致,因为如果ViewModel还能响应数据,但是窗口销毁了,有可能产生异常或者让人很难理解的地方。

3、ViewModel

MVVM模式中的VM。

4、Model

MVVM模式中的M,主要后台业务模型。这个地方的模型有可能是线程只能的有通知能力的模块(比如线程拉取服务消息通知界面展示)

5、View和ViewModel的通信

View和Viewmodel的数据通过binging;View的事件通过Command传递给Viewmodal;Viewmodal通过messenge通知事件到View,在View中WindowMessage创建View。

6、ViewModel和ViewModel的通信

通过messenge的方式需要在窗口关闭的时候反注册。通过Window Manager统一来处理。

7、ViewModel和Model的通信

ViewModel可以直接Call Model的方法;Model和ViewModel通过代理方式(messenger)通信,需要在窗口关闭的时候反注册。通过Window Manager统一来处理。

Model的通知消息(线程类的拉取消息)通知消息,如果有ViewModel注册该消息会收到通知。

8、其他

l Messenger调查

Messenger.Default.Register<string>(this, "hahaClose", OnHHClose);

Messenger.Default.Unregister(this);

Messenger.Default.Send<string>("132123", "hahaClose");

如果没有注册就调用Send,不会出错;

注册的响应必须手动释放,在窗口关闭的时候不会自动去掉这个关联关系。

从以上可以看到,窗口间通信支持复杂的对象。

时间: 2024-10-25 12:56:37

wpf框架模型分析的相关文章

MyCat线程模型分析

参考MyCat权威指南,对MyCat-Server里面的线程模型做简要分析: 1. 线程模型图 根据MyCat权威指南,做出以下线程模型图: MyCat的线程模型主要分为三部分(: 网络通讯线程.业务线程和定时任务线程,下面分别介绍这些线程的使用: [温馨提示] 这里排除JVM自身使用的线程,只关注MyCat服务所使用的线程,如果需要详细了解MyCat里面使用的所有线程,请参考<MyCat权威指南>-> 开发篇 -> MyCat线程模型分析 2. 网络通讯线程 MyCat-Serv

Android Tangram模型:连淘宝、天猫都在用的UI框架模型你一定要懂

前言 Tangram 是阿里出品.用于快速实现组合布局的框架模型,在手机天猫 Android & iOS版 内广泛使用 今天我将对Tangram 模型 进行全面介绍,希望你们会喜欢. 目录 1. 为什么要使用 Tangram 模型 在讲解 Tangram模型 前,我们先来搞懂一个问题:为什么要使用 Tangram模型 1.1 背景 技术 是用于 满足需求业务 的 解决方案,现有的需求业务可分为三类:基础业务.常规业务 & 临时性任务.具体细节如下: 1.2 问题 相应的解决方案的特点如下:

Linux MTD子系统 _从模型分析到Flash驱动模板

MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化硬件驱动框架.本文基于3.14内核,讨论MTD驱动框架. MTD子系统框架 设备节点层:MTD框架可以在/dev下创建字符设备节点(主设备号90)以及块设备节点(主设备号31), 用户通过访问此设备节点即可访问MTD字符设备或块设备. MTD设备层: 基于MTD原始设备, Linux在这一层次定义出

spi驱动框架全面分析,从master驱动到设备驱动

内核版本:linux2.6.32.2 硬件资源:s3c2440 参考:  韦东山SPI视频教程 内容概括: 1.I2C 驱动框架回顾 2.SPI 框架简单介绍 3.master 驱动框架 3.1 驱动侧 3.2 设备侧 4.SPI 设备驱动框架 4.1 设备册 4.2 驱动侧 5.设备驱动程序实例 1.I2C 驱动框架回顾 在前面学习 I2C 驱动程序的时候我们知道,I2C 驱动框架分为两层,一层是控制器驱动程序 i2c_adapter,它一般是由芯片厂商写好的,主要提供一个 algorithm

第一次作业:基于Orange&#39;s OS系统的进程模型分析与心得体会

1一. 操作系统进程概念模型与进程控制块概念浅析 1. 什么是进程? 图 1 - 1 (WIN10系统任务管理器对进程管理的图形化界面) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. --百度百科 应用程序的实例.对正在运行的程序的抽象. --<现代操作系统> 2. 什么是进程控制块? 进程控制块(Processing Control Block),是操作系统核心中一种数据结构,主要表示进程状态.其作用是使一个在多道程序环境下不能独立

ThinkPHP 框架模型

本文和大家分享的主要是ThinkPHP 框架模型相关内容,一起来看看吧,希望对大家学习php有所帮助. 1 在MainController.class.php 控制器中有一个test的方法,同时还有一个deng的方法,我想在test方法中使用deng方法 表示为 <?phpnamespace Home\Controller;use Think\Controller;class MainController extends controller{ public function test() {

javascript内存模型分析猜想

/* * 这里我是利用分析java内存模型的方法来猜想javascript的内存模型, * 由于没有看到国内有关于分析javascript的书籍,但是可以借鉴java的 * 内存模型结构来帮助理解javascript的内存模型中的原型机制,下面先 * 给出一个简单的原型例子 * */ "use strict"; function PrototypeModel(name,author,time){ } PrototypeModel.prototype.name = "Proto

(&#160;转)性能测试--地铁模型分析

地铁模型分析 和绝大部分人一样,小白每天都要乘坐地铁上下班,那么就拿地铁来分析,再次深刻理解下性能.早上乘坐地铁上班,最典型的就是北京地铁1.5.10.13号线等,人多得简直没法形容!为了方便理解分析,先做如下假设. 某地铁站进站只有3个刷卡机. 人少的情况下,每位乘客很快就可以刷卡进站,假设进站需要1s. 乘客耐心有限,如果等待超过30min,就会暴躁.唠叨,甚至选择放弃. 按照上述的假设,最初会出现如下的场景. 场景一:只有1名乘客进站时,这名乘客可以在1s的时间内完成进站,且只利用了一台刷

数据挖掘应用案例:RFM模型分析与客户细分(转)

正好刚帮某电信行业完成一个数据挖掘工作,其中的RFM模型还是有一定代表性,就再把数据挖掘RFM模型的建模思路细节与大家分享一下吧!手机充值业务是一项主要电信业务形式,客户的充值行为记录正好满足RFM模型的交易数据要求. 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标:最近一次消费(Recency).消费频率(Frequency).消费金额(Monetary). 我早期两篇博文已详述了RFM思想和IBM Modeler操作