一、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、其他

Messenger调查

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

Messenger.Default.Unregister(this);

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

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

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

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

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

  1. 高级设计总监的设计方法论——5W1H需求分析法 KANO模型分析法

    本期开始进入设计方法论的学习,大湿自己也是边学边分享,算是巩固一遍吧: 另外这些理论基本都是交叉结合来应用于工作中,我们学习理论但不要拘泥于理论的框架中,掌握后要灵活运用一点- 这些理论一部分来自于我 ...

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

    内核版本:linux2.6.32.2  硬件资源:s3c2440 参考:  韦东山SPI视频教程 内容概括:     1.I2C 驱动框架回顾     2.SPI 框架简单介绍     3.maste ...

  3. 产品需求分析神器:KANO模型分析法

    前言: 任何一个互联网产品,哪怕是一个简单的页面,也会涉及到很多的需求,产品经理也会经常遇到这样的情况:老板,业务提的各种新需求一下子都扎堆,哪个需求对用户来说最重要,用户对我们的新功能是否满意?开发 ...

  4. WPF 3D 模型旋转

    原文:WPF 3D 模型旋转 WPF 是 Microsoft 在 Framework3.0 中支持的一种技术,它能作出很绚丽的界面,同时它也支持3D的操作.在3D操作主要包括平移(Translate) ...

  5. 动态加载框架DL分析

    动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...

  6. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  7. 【PSR规范专题(1)】PSR-0+namespace+spl_autoload_register实现框架模型

    了解命名空间 namespace是PHP5.3版本加入的新特性,用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/ ...

  8. ThinkPHP框架模型连贯操作(八)

    原文:ThinkPHP框架模型连贯操作(八) Thinkphp的连贯操作使用起来也是很灵活: *可能这里有的mysql函数没全部罗列出来,大家可以举一反三,形式雷同 一.常用连贯操作 1.where ...

  9. VSTO学习笔记(七)基于WPF的Excel分析、转换小程序

    原文:VSTO学习笔记(七)基于WPF的Excel分析.转换小程序 近期因为工作的需要,要批量处理Excel文件,于是写了一个小程序,来提升工作效率. 小程序的功能是对Excel进行一些分析.验证,然 ...

随机推荐

  1. 实现步骤: 推送&传感器&UIDynamic

    一.本地通知基本使用: #01.请求授权(8.0以前默人授权) #02.创建本地通知 #03.设置通知内容 #04.设置通知时间(多久后发通知) #05.发送通知 二.本地通知而外设置: #01.设置 ...

  2. 如何查看某个查询用了多少TempDB空间

        最近帮助客户调优的过程中,发现客户的TempDB存在非常大的压力,经过排查是发现某些语句对TempDB的巨量使用所导致.     在SQL Server中,TempDB主要负责供下述三类情况使 ...

  3. .NET面试题解析(07)-多线程编程与线程同步

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 关于线程的知识点其实是很多的,比如多线程编程.线程上下文.异步编程.线程同步构造.GUI的跨线程访问等等, ...

  4. Spring(一)第一个示例

    原文链接:http://www.orlion.ga/185/ 一.下载与安装Spring 1.访问https://repo.spring.io/webapp/#/artifacts/browse/tr ...

  5. sublime简要笔记

    选中单词 [1]选中当前单词 ctrl+d [2]跳过当前单词 ctrl+k ctrl+d [3]选中相同的所有单词 alt+f3 [4]多行游标 按住shift,然后按住鼠标右键向下拖动 行操作 [ ...

  6. 如何用Python寻找重复文件并删除

    在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by ...

  7. 【Spring】Spring AOP实现原理

    Spring AOP实现原理 在之前的一文中介绍过Spring AOP的功能使用,但是没有深究AOP的实现原理,今天正好看到几篇好文,于是就自己整理了一下AOP实现的几种方式,同时把代理模式相关知识也 ...

  8. Network - curl和Wget

    curl - transfer a URL curl SYNOPSIS curl [options] [URL...] DESCRIPTION curl is a tool to transfer d ...

  9. TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器

    TCP一共有四个主要的定时器,前面已经讲到了一个--超时定时器--是TCP里面最复杂的一个,另外的三个是: 坚持定时器 保活定时器 2MSL定时器 其中坚持定时器用于防止通告窗口为0以后双方互相等待死 ...

  10. 暴力枚举 + 24点 --- hnu : Cracking the Safe

    Cracking the Safe Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit u ...