如果你对MVVM的概念还是不了解,可以参看下面链接:
http://baike.baidu.com/view/3507915.htm

我们以WPF+MVVM的本地桌面程序为背景,这样一来我们可以不去操心服务器那部分的事情,更加专注我们的MVVM。我打算把最重要的部分放到开头来讲,而接下来这最重要的部分却是全篇教程唯一没有代码的部分。好,下面开始。

MVVM不是什么框架,也不是什么代码生成器,它其实就是一种建议而已。很多朋友对于这个词很困惑:到底我怎么样做,我的程序才是一个标准的MVVM模式?其实我们没有必要去纠结中一点,因为(至少我)还没有见到任何一个程序能实现100%的MVVM。所以我们需要做的是,理解MVVM,然后采用MVVM的思想+现成的框架去搭建出一个程序即可,至于是不是标准的MVVM,不要过分去纠结。我看到过一些失败的例子:有些人为了实现零输出的后台代码,竟然采用一些更加繁琐晦涩的方法来达到此目的——这样就背离了MVVM的初衷了。我个人认为,后台代码不是恶魔,当用则用,但不要滥用。

那么,MVVM是解决所有问题的最终解决方案吗?当然不是。MVVM只解决了界面和数据之间通信的问题,但是除此以外,一般的程序还面临其他很多问题,例如数据的存储,远程通信,耦合问题,效率问题,等等。

这个教程还是以一个小程序为例子,而这次我打算用一个功能非常简单的程序来讲MVVM:我们来做一个电话簿。但是首先你要预习以下知识:
1. 什么是Model,View,ViewModel?
2. 什么是XAML?以及XAML一些最基本的语法
3. 什么是事件(event)?
4. 什么是接口?什么是INotifyPropertyChanged接口?
5. 什么是绑定?绑定这几种方式(OneWay, TwoWay, OneWayToSource)的不同点是什么?

接下来,我们来讨论一下将要用到的工具。

首先是VisualStudio 2010,这个没什么可说的,大家都知道,你也不要吝啬了,升级到2010没有任何坏处。

MvvmLight Toolkit——这是一个很轻的MVVM框架。麻雀虽小,五脏俱全,应该能满足我们小程序的所有需求。网址:http://mvvmlight.codeplex.com/

NuGet——这个工具类似于Maven,主要是为你的项目解决第三方DLL的问题。我们的项目经常要使用其他的DLL,比如Json.NET,而每次去人家的页面下载,然后再复制粘贴到你的项目中,最后再引用,是个很重复单调的过程,用NuGet可以比较优雅的帮你解决这些烦恼。网址:http://nuget.org/

MEF——Managed Extensibility Framework,这个尚在考虑之中。有些朋友可能对IoC(Inversion of Control)或者Dependency Injection不熟悉,所以我还在犹豫要不要在例子中使用这个。相关知识网址:http://en.wikipedia.org/wiki/Inversion_of_control;http://en.wikipedia.org/wiki/Dependency_injection
Caliburn Micro——另一个MVVM框架。我比较偏爱这个框架。它的思想很巧妙,而且用起来也很方便,上手也很容易。网址:http://caliburnmicro.codeplex.com/

Json.NET——我们有可能会用到这个开源库。原因在于我们可能需要一个简单的数据存储层,所以我打算用Json.NET将DataSet转成BSON(http://bsonspec.org/),然后存入本地文件。读取时候可以用Json.NET将BSON转回DataSet。网址:http://json.codeplex.com/

此外,MVVM的框架非常之多,微软有个Prism,但是我不准备用它做例子,因为Prism操心的事情太多了,这个简单教程讲不了那么多。其实最主要的是,我对Prism不熟悉。

如果你对美化UI感兴趣,可以试试这两个东西:
Ookii.Dialogs —— http://www.ookii.org/software/dialogs/
MahApps.Metro —— http://www.theleagueofpaul.com/metro

本文来源于:http://www.lmwlove.com/ac/ID796

MVVM简介的更多相关文章

  1. MV、MVC、MVP、MVVM简介,对MVC不确定了。

    参考: http://www.cnblogs.com/changxiangyi/archive/2012/07/16/2594297.html http://www.jcodecraeer.com/a ...

  2. MVVM简介与运用

    在介绍MVVM框架之前,先给大家简单介绍一下MVC.MVP框架(由于本博文主要讲解MVVM,所以MVC和MVP将简化介绍,如果需要我将在以后的博文中补充进来). MVC框架: M-Model : 业务 ...

  3. MVVM 简介

    转:https://objccn.io/issue-13-1/ 所以,MVVM 到底是什么?与其专注于说明 MVVM 的来历,不如让我们看一个典型的 iOS 是如何构建的,并从那里了解 MVVM: 我 ...

  4. 架构 MVC MVP MVVM 简介 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. [转载]MVVM模式原理分析及实践

    没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Wi ...

  6. WPF MVVM 学习总结(一)

    ---恢复内容开始--- 1. MVVM简介 在WPF中,MVVM(View-ViewModel-Model)开发模型用的很多,它具有低耦合,可重用行,相对独立的设计和逻辑.所以备受广大开发者的喜爱. ...

  7. WPF+MVVM学习总结 DataGrid简单案例

    一.WPF概要 WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的 ...

  8. MVVM模式原则

    1.MVVM简介 这个模式的核心是ViewModel,它是一种特殊的model类型,用于表示程序的UI状态.它包含描述每个UI控件的状态的属性.例如,文本输入域的当前文本,或者一个特定按钮是否可用.它 ...

  9. WPF学习07:MVVM 预备知识之数据绑定

    MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对 ...

随机推荐

  1. goaccess的安装和使用

    一.简介1.goaccess用于分析apache和nginx日志的强大工具 2.官网:https://goaccess.io 二.安装1.下载goaccess的安装包wget http://tar.g ...

  2. python pip源

    pipy国内镜像目前有: http://pypi.douban.com/  豆瓣 http://pypi.hustunique.com/  华中理工大学 http://pypi.sdutlinux.o ...

  3. Qt程序打包(使用Enigma Virtual Box和BoxedApp Packer封包)

    一.使用单文件封包工具 单文件封包工具,顾名思义就是将可执行文件及其相关依赖打包成单个可执行文件的工具. 这里推荐两个单文件封包工具:Enigma Virtual Box和BoxedApp Packe ...

  4. 在没有安装有mvc3的主机上部署asp.net mvc3网站,需要包含的DLL文件

    原文:在没有安装有mvc3的主机上部署asp.net mvc3网站,需要包含的DLL文件 http://hi.baidu.com/aspxdiyer/blog/item/5515a69943232f1 ...

  5. sql条件为空查询全部,不为空按条件查询以及多条件筛选查询。

    procedure queryLackLonOrLatTdCell(i_region_name varchar2, i_state varchar2) is begin select region_n ...

  6. 关于问题ld:library not found for -lXXX的错误

    我猜想错误引起的原因可能是因为我复制target的时候原来的工程中的的link binary with libraries中原来的libpods-xxx.a没有删除.我将多余的libPods删除后解决 ...

  7. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  8. js实现下滑加载更多的效果

    var stop=true;$(window).scroll(function(){ totalheight = parseFloat($(window).height()) + parseFloat ...

  9. centos 安装pptp

    1. 安装依赖 ppp yum -y install ppp 2. 编译安装pptpd wget http://jaist.dl.sourceforge.net/project/poptop/pptp ...

  10. could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'

    VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Relea ...