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没有任何坏处。

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

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

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

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

Caliburn Micro——另一个MVVM框架。我比较偏爱这个框架。它的思想很巧妙,而且用起来也很方便,上手也很容易。网址:http://caliburnmicro.codeplex.com/

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

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

简单MVVM教程的更多相关文章

  1. OpenMP的简单使用教程

    转自:http://binglispace.com/2015/01/09/openmp-intro/ OpenMP的简单使用教程 今天有幸参加了一个XSEDE OpenMP的workshop讲座,真是 ...

  2. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  3. knockout简单实用教程3

    在之前的文章里面介绍了一些KO的基本用法.包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识.包括比较特殊绑 ...

  4. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  5. sea.js简单使用教程

    sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...

  6. vim简单使用教程【转】

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

  7. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  8. 【git】git简单使用教程

    git的简单使用教程: 1.安装git bash客户端 2.打开git bash,cd到需要存储代码的路径下, 执行:git clone -b deploy ssh://git@gitlab.xxxx ...

  9. Flyway 简单入门教程

    原文地址:Flyway 简单入门教程 博客地址:http://www.extlight.com 一.前言 Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway 可以 ...

随机推荐

  1. android:ellipsize="end" 失效或者 相关的Bug

    其实这文章有点傻逼. 相关的问题 TextView android:ellipsize=“end”超出一个字符时不显示…的解决 http://www.pocketdigi.com/20140122/1 ...

  2. Tsk4.5异步

    public async void LoadData<T>(WhereClip where,OrderByClip order) where T : Entity, new() { try ...

  3. 【Android】1.2 创建Android模拟器

    分类:C#.Android.VS2015:  创建日期:2016-01-20 调试手机应用程序一般先用模拟器来实现,只是因为每次都发布到手机上调试太麻烦了.当应用程序在模拟器上调试没错后,再发布到手机 ...

  4. Backpropagation In Convolutional Neural Networks

    http://www.jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/ http://w ...

  5. 灯光探测器LightProbe[Unity]

    灯光探测器的目的,抄手册上的话就是: Although lightmapping adds greatly to the realism of a scene, it has the disadvan ...

  6. hive的UDF读取配置文件

    hive的UDF读取配置文件 实现步骤 在读取配置文件的写为./file_name,然后在添加UDF的时候把配置文件也加入资源就好了: add jar xxx.jar; add file file_n ...

  7. android adb 读写模式 挂载文件系统

    http://www.qylk.blog.163.com/blog/static/1346873562013092154430/ http://blog.sina.com.cn/s/blog_9906 ...

  8. js实现手机摇一摇

    //手机摇一摇 ---------------------------------------------------------- init();var SHAKE_THRESHOLD = 3000 ...

  9. google3aac509c9040e79d

    google-site-verification: google3aac509c9040e79d.html

  10. Android开发(五)——计时器

    发送验证码后倒计时,Android自带计时器CountDownTimer,重写自己的计时器以实现跟新View的效果. package com.lgaoxiao.widget; import andro ...