致敬

在此致敬翁智华大佬,感谢大佬为后辈们写下如此详细的文档,本文将在原文基础上添加些自己的理解,希望这样优秀的文档广为流传。

原文请参考

https://www.cnblogs.com/wzh2010/p/6285954.html

一、MVVM 和 MVVMLight

要了解MVVMLight,得先了解MVVM。

 首先,MVVM是Model-View-ViewModel的简写。类似于目前比较流行的MVC、MVP设计模式,

主要目的是为了分离视图(View)和模型(Model)的耦合。它是一种极度优秀的设计模式,但并非框架级别的东西

所以不要再说MVVM框架了),它是由MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型

架构。

结构如图所示:

相对于之前把逻辑结构写在Code Behind(就是将代码直接写在cs里面导致界面逻辑和业务逻辑混在一起) 里面的方式,

MVVM几乎完全解耦了视图和逻辑业务的关系,通过数据绑定和命令来处理UI属性及事件驱动(即数据驱动界面)。

同理,ViewModel的视图交互业务逻辑处理导致的属性变更也会通知到View前端,让View前端实时更新。

Model模型:存放数据模型和数据逻辑、业务逻辑

ViewModel:负责Model和View之间的协调调用,即捕捉View上进行的操作后,再调用Model的相关类的方法对属性和变量等进行更改。

View(视图):负责界面展示。

一个View可以绑定一个ViewModel,但是一个ViewModel可以对应多个View,

这种类型的双向绑定非常优秀,View的变动,会自动反应到ViewModel上,反之亦然。

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点

1. 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,

当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2. 可重用性:可以把一些视图逻辑放在一个ViewModel里面,让很多View重用这段视图逻辑。

3. 独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,

使用Expression Blend可以很容易设计界面并生成xml代码。

4. 可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

希望对MVVM有更进一步了解的同学可以看看这篇文章:https://www.codeproject.com/kb/wpf/wpfmvvmquickstart.aspx

作者从MVVM的模式介绍到数据绑定、消息通知、命令等几个主要方面都有详细的说明。

如果你目前正在进行微软的 WPF 、Windows Phone、Windows 8、SilverLight相关项目的开发,

我觉得很有必要了解一下MVVM Light框架。它轻量(相对于Prism),专注(仅负责MVVM架构模式的实现,

没有其他多余的组件),高效(使用简易,省时减力),能够帮助你更好的开发你的应用。

像羽毛一样轻的MVVMLight(一)(MVVM 和 MVVMLight简介)的更多相关文章

  1. MVVM、MVVMLight、MVVMLight Toolkit之我见

    原文:MVVM.MVVMLight.MVVMLight Toolkit之我见 我想,现在已经有不少朋友在项目中使用了MVVMLight了吧,如果你正在做WPF,Silverlight,Windows ...

  2. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

  3. [uwp]MVVM之MVVMLight,一个登录注销过程的简单模拟

    之前学MVVM,从ViewModelBase,RelayCommand都是自己瞎写,许多地方处理的不好,接触到MVVMLigth后,就感觉省事多了. 那么久我现在学习MVVMLight的收获,简单完成 ...

  4. 从头开始:详解MVVM、MVVMLight

    究竟为什么要学习MVVM? 相信大部分同学在刚开始接触MVVM的时候(包括我自己),心里默默在想这究竟是什么玩意?一个简单的功能要写一大段代码才能完成,在看到MVVM的核心目标: 1.让UI界面与逻辑 ...

  5. MVVM框架-MVVMLight

    项目URL:http://www.mvvmlight.net/ 一.安装MVVMLight 在NuGet程序包中搜索MVVMLight,然后安装. 二.使用 安装完MVVMLight后项目中会自动生成 ...

  6. UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享

    在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎 ...

  7. 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用

    一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的MVC.MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的 ...

  8. MVVMLight 1:MVVMLight介绍以及在项目中的使用

    一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的MVC.MVP设计模式,主要目的是为了分离视图(View)和模型(Model)的 ...

  9. MVVMLight介绍以及在项目中的使用

    http://www.des8.me/detail-1822826.html 一.MVVM 和 MVVMLight介绍 MVVM是Model-View-ViewModel的简写.类似于目前比较流行的M ...

随机推荐

  1. Linux嵌入式学习-交叉编译mplayer

    http://bbs.gkong.com/archive.aspx?ID=286721

  2. intellij IDEA Mybatis入门案例

    最近打算学习ssm框架  Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...

  3. 简单session实现

    简单的session校验实现 利用拦截器实现 package com.ryh.blog.intecepter; import org.springframework.core.Ordered; imp ...

  4. 基于MongoDB权限管理+gridfs文件上传------云盘系统

    学了一会Mongo,开始毕设的编写. 毕设目前一共分为如下模块 用户管理模块 管理员管理模块 文件管理模块 分享模块 目前已经完成了权限管理部分的后端代码.上传下载已经实现Demo.先把权限弄好后在整 ...

  5. spring: 我是如何解决循环依赖的?

    1.由同事抛的一个问题开始 最近项目组的一个同事遇到了一个问题,问我的意见,一下子引起的我的兴趣,因为这个问题我也是第一次遇到.平时自认为对spring循环依赖问题还是比较了解的,直到遇到这个和后面的 ...

  6. 高性能MySQL学习总结二----常见数据类型选择及优化

    一.数据类型的选择 MySQL的数据类型有很多种,选择正确的数据类型对于获得高性能特别地重要,如何选择合适的数据类型呢?主要遵从以下三个原则: 1.更小的通常情况下性能更好 一般情况下,应该尽量使用可 ...

  7. LVS之2---基于LVS负载均衡集群架构

    LVS之2---基于LVS负载均衡集群架构实现 目录 LVS之2---基于LVS负载均衡集群架构实现 ipvsadm software package Options 常用命令 保存及重载规则 内存映 ...

  8. IDEA关联mysql失败Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'

    时区错误,MySQL默认的时区是UTC时区 要修改mysql的时长 在mysql的命令模式下,输入: set global time_zone='+8:00'; 再次连接成功

  9. Java基础经典案例

    案例列表 01减肥计划switch版本 02减肥计划if版本 03逢七跳过 04不死神兔 05百钱白鸡 06数组元素求和 07判断两个数组是否相同 08查找元素在数组中的索引 09数组元素反转 10评 ...

  10. C语言实现九大排序算法

    C语言实现九大排序算法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序 C语言实现九大排序算法 直接插入排序 将数组分为两个部分,一个是有序部分,一 ...