在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来。也可以通过 http://files.cnblogs.com/chengxingliang/GalaSoft.MvvmLight.V3.rar 下载MVVM Light Toolkit。然后我们安装这个安装包,然后重新打开VS2010,新建一个项目,如下图所示:

Tip:MVVM分为Model、ViewMode、View三层。

•Model是实体类层,它存放所有需要用到的实体类。

•ViewMode层是逻辑层,操作所有Model层和View界面层的逻辑运算并且作为一个大的实体类,提供属性绑定到View层上面去。

•View层是界面显示层,只需要它的Xaml代码去绑定相应的ViewMode层的属性即可。

下面我们来看新建成功的项目结构如下:

一、在这里我们先来看MainPage.xaml中的代码,在这里绑定的MainPage.xaml是View层,它绑定上了ViewModel层,也就是MainViewModel.cs类

<UserControl x:Class="MvvmLight1.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"Height="300"Width="300"DataContext="{Binding Main, Source={StaticResource Locator}}"><!--在这里绑定App.xaml中的静态资源,以连接MainViewModel类(ViewMode层)  MainPage.xaml代码为View层--><UserControl.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Skins/MainSkin.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary></UserControl.Resources><Grid x:Name="LayoutRoot"><TextBlock FontSize="36"FontWeight="Bold"Foreground="Purple"Text="{Binding Welcome}"VerticalAlignment="Center"HorizontalAlignment="Center"TextWrapping="Wrap" Margin="12,25,20,171" /><Button Content="{Binding BtnContent}" Height="23" HorizontalAlignment="Left" Margin="12,178,0,0"Command="{Binding ShowMessage}" Name="button1" VerticalAlignment="Top" Width="75" /><Button Content="点我改变文字" Height="23" HorizontalAlignment="Left" Command="{Binding ChangeText}"Margin="187,178,0,0" Name="button2" VerticalAlignment="Top" Width="75" /></Grid>
</UserControl>

二、然后我们看ViewModel层,在这里我们申明了一些string属性以绑定到View层得显示内容上,然后对于鼠标的点击事件采用Command命令传递事件和处理方法,并且设置绑定。这样我们可以直接将前台的点击事件等和后台分离,并且我们可以继承INotifyPropertyChanged接口,以让ViewModel层的属性被改变的时候,也反映到View层,在Command方法中改变ViewModel层的属性即可改变View层的前台显示。其具体的详解在下面的代码中已经给出。

using GalaSoft.MvvmLight;
using System.Windows.Input;
using GalaSoft.MvvmLight.Command;
using System.Windows;
using System.ComponentModel;namespace MvvmLight1.ViewModel
{/// <summary>/// This class contains properties that the main View can data bind to./// <para>/// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel./// </para>/// <para>/// You can also use Blend to data bind with the tool's support./// </para>/// <para>/// See http://www.galasoft.ch/mvvm/getstarted/// </para>/// </summary>public class MainViewModel : ViewModelBase, INotifyPropertyChanged{public string Welcome{get{return "欢迎使用MVVM Light! ";}}/// <summary>/// 类初始化/// </summary>public MainViewModel(){_btnContent = "点击我";RegistCommand();}//A.对于属性的绑定private string _btnContent;public string BtnContent{set{_btnContent = value;NotifyPropertyChanged("BtnContent");}get{return _btnContent;}}//B.1申明对于点击事件的绑定public RelayCommand ShowMessage { get; set; }//使用C步骤的注册,将Command和需要运行的方法联系起来。private void showmsg(){MessageBox.Show("你成功的将命令绑定到界面层!");}//B.2改变界面上的控件显示文字public RelayCommand ChangeText { get; set; }//执行改变文字操作private void changeTxt(){BtnContent = "我已经被改变了";}//是否可以改变文字private bool canchangeTxt(){if (BtnContent == "点击我"){return true;}else{return false;}}//C.对于所有的事件进行注册private void RegistCommand(){//C.1指定需要执行的函数showmsg()ShowMessage = new RelayCommand(() => showmsg());//先执行canchangeTxt()函数,验证是否可以改变文字,如果可以改变则执行changeTxt()函数ChangeText = new RelayCommand(() => changeTxt(), () => canchangeTxt());}public event PropertyChangedEventHandler PropertyChanged;public void NotifyPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}}}
}

三、在这里我们没有使用到Model层,它用于构造实体集合以绑定诸如DataGrid之类的控件。

最后我们来看实例的运行效果如下,如需源码请点击 MvvmLight1.rar 下载。

Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)...相关推荐

  1. Silverlight实用窍门大集合+Silverlight 5 最全新特性【目录索引】

    在最近的几个月内整理出了Silverlight的一些相关的比较实用的功能讲解文章,并且随着Silverlight 5 beta版本的发布整理出的新特性系列文章,在这里做一个总的概括和索引,以方便大家观 ...

  2. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图

    在本系列的第17篇文章中"Silverlight实用窍门系列:17.中心点联动多线的可拖动控件(绘制工程图.拓扑图基础) ",制作了基本的中心联动图标.有园友对此图的扩展不是很清晰 ...

  3. Silverlight实用窍门系列:71.Silverlight的Style

    此文章实例基于Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary,如有数据源疑问请参考该文章. 在Silverlight中的Style相当于 ...

  4. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

  5. Silverlight实用窍门系列:61.Silverlight中的Trigger触发器,自定义翻页触发器

    在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器. Trigger触发器:引发动作的因素,比如鼠标点击.键盘 ...

  6. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  7. Silverlight实用窍门系列:54.详解Silverlight中的矩阵变换MatrixTransform,实现其余各种变换【附带实例源码】...

    在Silverlight中的MatrixTransform矩阵变换相对上篇文章所述的变换较复杂一些,但这种变换也更灵活. MatrixTransform的实质:让需要变换的元素上的每一个像素点*矩阵得 ...

  8. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地【附带实例源码】...

    在Silverlight中我们可以捕捉视频设备以制作视频会议系统,或者通过视频设备截图功能上传头像等功能. 下面我们通过一个简单的实例来访问视频设备,并且截取图像下载该截图文件至本地. 一.在Silv ...

  9. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

最新文章

  1. UVa 10652 (简单凸包) Board Wrapping
  2. modbus4-232 485 单机 多机
  3. strstr函数_[LeetCode] 28. 实现strStr()
  4. 硬件:如何选购适合自己的显示器
  5. linux命令中tar后跟的zxvf是什么意思
  6. 零基础想学Python,明白这2点,越快年薪30W!
  7. 电商运营、美工必备导航类网站,有效提高工作效率
  8. oracler日期函数相差六个月_oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等...
  9. python列表字典元祖_python列表,字典,元组常用方法和集合
  10. 数据集的划分--训练集、验证集和测试集
  11. 思科服务器中ftp的配置文件,思科服务器ftp的配置
  12. Pidgin 2.3.1语言设置方法
  13. iOS 边学边记 升级ios14 Xcode真机调试启动非常慢的问题解决
  14. mysql一百转化为五分制_设计一个程序,将从键盘上输入的百分制成绩转换成对应的五分制成绩并输出。90分以上为A,80~90分为B,...
  15. excel窗体最大化最小化_最小化Excel 2007功能区
  16. FANUC机器人的通讯方式(4)TIA博途如何添加机器人组态网络
  17. java查看端口号被占用的命令_linux下怎么查看哪些端口被占用
  18. 主外键constraint、primary key、foreign key、check、default的用法和理解
  19. libxml2如何配合php使用,libxml2使用简介-----(转载)
  20. python pls_【建模应用】PLS偏最小二乘回归原理与应用

热门文章

  1. SQL 查询总是先执行SELECT语句吗?你们都错了!
  2. 提升开发效率的一款mybatis开发神器
  3. ​【特征工程】时序特征挖掘的奇技淫巧
  4. 北大30岁女博导获2019 IEEE青年成就奖,全球仅三人,深耕微纳电子、神经形态计算...
  5. Datawhale第四期组队学习团队成员
  6. 何恺明时隔2年再发一作论文:为视觉大模型开路,“CVPR 2022最佳论文候选预定”...
  7. 有人竟然为了两千多的眼镜倒贴10亿???
  8. IRNet:弱监督实例分割 | 步步为营,隔山打牛
  9. 模型的跨界:我拿Transformer去做目标检测,结果发现效果不错
  10. Linux shell命令总结