花了一点时间看了一下微软开源MVVM代码,受义很多!

  从代码整体上看,代码分为四大类,

从图中看不能明白我要表达的意思。显而意见!MainApplicationWindow.xaml是应用程序主窗口(V层),DocumentManager.cs是数据管理层,PersonViewModel.cs 是数据层(M层)。

DocumentManagerAdapter.cs可能有点难以明白,为什么DocumentManager.cs数据管理层,为什么还要Adapter层呢!其实这是分工更细化,DocumentManagerAdapter.cs是程序逻辑层(VM层)

从运行后窗口看,框架有两个tabItem多文档,从这里可以看出框架是多档,所以要DocumentManager.cs是数据管理层,将应用程序打开的所有文档进一步的管理,其实这层还是停留在M层。

整体了解了下,现在开始分析细节,四个类三层是怎样结合到一起的呢!

 namespace MvvmDemo {

     /// <summary>
/// Contains the <c>Main()</c> method that starts the application
/// </summary>
public static class MainMvvmDemonstrationApplication { /// <summary>
/// Starts the application
/// </summary>
/// <param name="args">The collection of program arguments.</param>
[STAThread]
public static int Main(string[] args) {
        ......
try {
#endif
........
// Initializes an instance of your System.Windows.Application derived class
var application = new MvvmDemo.View.App(); // Instantiates the main window class
var mainWindow = new MvvmDemo.View.MainApplicationWindow(); // Initializes the view-model layer with the view layer’s document manager adapter
// and tie it into the persistence layer
/**********************************************************************************/
// 这两句很重要
// docContainer是主窗口tab控件
// adapter是tab的文档管理类
var docContainer = mainWindow.MasterDocumentContainer;
var adapter = new MvvmDemo.View.DocumentManagerAdapter(docContainer);
/**********************************************************************************/
         ....... application.Run(mainWindow);            ........
} }//class }//namespace

出点一些多途的代码,现在看条理就清楚多了。在Main定义了四个全局变量,

var application = new MvvmDemo.View.App();
var mainWindow = new MvvmDemo.View.MainApplicationWindow();
var docContainer = mainWindow.MasterDocumentContainer;
var adapter = new MvvmDemo.View.DocumentManagerAdapter(docContainer); 这四个类型在前面已经说到了两个,对象 docContainer 是 mainWindow 对象中的变量,其实可以当作控件TabControl。对象application有一点编程经验的都知道,不明白可以到网上找找,我在这里不多讲了。 在前面不是说了还有一个DocumentManager.cs怎么在这里没有看到它呢,先别急,我先分析完对象 DocumentManagerAdapter这个对象里有一个引用mainWindow中的docContainer (相当于TabControl)
其实DocumentManagerAdapter里还有一个DocumentManager对象,因为它是mainWindow和DocumentManager之间的桥梁(相当于VM层)这样理解还不如说docContainer (相当于TabControl)和Document这间要桥梁。 很晚了,有时间在接着下吧!代码在后文本加上。
												

MVVM框架解析(一)的更多相关文章

  1. MVVM 框架解析之双向绑定

    更好的阅读体验,点击 原文地址 MVVM 框架 近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移.在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整个页面,从而 ...

  2. VUE的MVVM框架解析

    这篇文章主要介绍了MVVM模式中ViewModel和View.Model有什么区别?本文分别解释了它们的功能和作用,然后总结了它之间的区别,需要的朋友可以参考下 Model:很简单,就是业务逻辑相关的 ...

  3. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  4. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  5. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

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

  6. 迷你MVVM框架 avalonjs 入门教程

    新官网 请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-contro ...

  7. 前端MVVM框架设计及实现(一)

    最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我记得还是去年6月写过一个系列的av ...

  8. 前端MVVM框架设计及实现(二)

    在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...

  9. 迷你MVVM框架 avalonjs1.5 入门教程

    avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVV ...

随机推荐

  1. 转:【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17225469    在Java中,可以通过配合调用Object对象的wait()方法和no ...

  2. 201521123083《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 上周这张图没理解完,继续 2. 书面作业 本次PTA作业题集多线程 1互斥访问与同步访问完成题集4-4(互斥访问) ...

  3. 团队作业8——第二次项目冲刺(Beta阶段)Day6——5.25

    1.提供当天会议照片: 2.会议的内容: (1)讨论已经完成的功能,讨论存在的问题 (2)对于界面,谈谈各自的看法 (3)讨论接下来的任务和改进的地方 3.工作安排: 队员 今日任务 明日任务 贡献比 ...

  4. 【Beta】 第七次Daily Scrum Meeting

    第七次meeting会议 [Beta] 第七次Daily Scrum Meeting 一.本次会议为第七次meeting会议 二.时间:10:00AM-10:20AM 地点:禹州楼 三.会议站立式照片 ...

  5. 201521123095 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 Q1 List中指定元素的删除(题目4-1) 1.1 实验总结 对于删除函数 ...

  6. 201521123018 《Java程序设计》第2周学习总结

    1. 本章学习总结 * String类 * Java数组Array的使用 2. 书面作业 Q1.(1) 使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)? (2)分析Stri ...

  7. Eclipse rap 富客户端开发总结(3):rcp/rap目前界面上的一些差异

    1. Label和Button按钮的显示的差异 当Label 和 Button显示的文字过长显示不开的时候,rcp.rap的处理方式就不一样了,rap显示不开会自己截取掉后面的文字,rcp会在文字的中 ...

  8. lintcode.22 平面列表

    平面列表    描述 笔记 数据 评测 给定一个列表,该列表中的每个要素要么是个列表,要么是整数.将其变成一个只包含整数的简单列表. 注意事项 如果给定的列表中的要素本身也是一个列表,那么它也可以包含 ...

  9. Ring3层 UNICODE_STRING

    今天写驱动用到UNICODE_STRING,就在Ring3层抠了一些源代码,学习一下,不多说了上代码了 #pragma once #include <windows.h> #include ...

  10. 用reduce实现阶乘计算

    def fact(a,b): return a*b from functools import reduce print(reduce(fact,range(1,6))) from functools ...