花了一点时间看了一下微软开源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. Spring MVC 解决无法访问静态文件和"全局异常处理"

    我们都知道,Spring MVC的请求都会去找controller控制器,若果我们页面中引入了一个外部样式,这样是没效果的, 我们引入样式的时候是通过<like href="...&q ...

  2. string和double之间的相互转换(C++)

    很多人都写过这个标题的文章,但本文要解决的是确保负数的string和double也可以进行转换. 代码如下: string转double double stringToDouble(string nu ...

  3. 团队作业4——第一次项目冲刺(Alpha版本)第六天and第七天

    团队作业4--第一次项目冲刺(Alpha版本)第六天and第七天 第一次项目冲刺(Alpha版本)第六天 一.Daily Scrum Meeting照片   二.燃尽图 1.解释说明横纵坐标代表的含义 ...

  4. 团队作业4——第一次项目冲刺(Alpha版本) Day5

    首先和助教及老师表示抱歉,博客确实当时就写了,但是一直不算写好,因为这几天卡住了,预计实现的功能实现不了,进度跟不上,现在也在寻求解决方法. 1.站立式会议: 2. Leangoo任务分解图: 3.任 ...

  5. sudoku作业

    1.Github项目地址: https://github.com/ataiyang/ls 2.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟 ...

  6. list后台转化为JSON的方法ajax

    导入alibaba的fastJson包 后台: protected void doGet(HttpServletRequest request, HttpServletResponse respons ...

  7. Swing-布局管理器之BorderLayout(边界布局)-入门

    注:本文内容基本源于Java图形化界面设计——布局管理器之BorderLayout(边界布局),笔者学习过程中根据自身理解进行少量编辑. 边界布局管理器(BorderLayout)把容器的的布局分为五 ...

  8. 201521123080《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  9. 201521123067《Java程序设计》第1周学习总结

    1.本周学习总结 在本周的java学习中,我知道了java的发展历程,JDK和JRE以及JVM的区别与联系,并学习了如何安装Eclipse和搭建java的环境,编写出了第一个java程序,明白了jav ...

  10. 初试 Vue.js

    1.为什么我会想要来弄弄vue这个前端框架呢? 答:前段时间被小程序刷屏了,然后就去弄了一下小程序,嗯挺简单的:头脑一发热后就想到vue2也发布一段时间了,何不也来尝尝vue2.0的味道,最后发现它们 ...