MVVM(Model-View-ViewModel)实例讲解

MVVM(Model-View-ViewModel)实例讲解,第1张

概述MVVM模式大家应该不陌生吧,陌生的快来看看,可是WPF/Silverlight开发中,必备的设计模式。 MVVM模式解决了,我们在开发WPF/Silverlight应用程序过程中产生的业务层、表示层比较混乱问题,使表示层和业务层完全分离。 早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expressi

MVVM模式大家应该不陌生吧,陌生的快来看看,可是WPF/Silverlight开发中,必备的设计模式。
MVVM模式解决了,我们在开发WPF/Silverlight应用程序过程中产生的业务层、表示层比较混乱问题,使表示层和业务层完全分离。
早在2005年,John Gossman写了一篇关于Model-VIEw-viewmodel模式的博文,这种模式被他所在的微软的项目组用来创建Expression Blend。

从上图可以看出来,VIEw表示层就是我们通常的XAML,用来表示前台界面,viewmodel视图模块层的作用用来连接业务逻辑和视图层的关键部分,通常我们发出的命令或者事件都是通过这层传送给业务逻辑层的,Model就是我们的实际数据,业务逻辑代码等。

下面我们用一个Silverlight简单例子来讲解MVVM模式

这个程序就是实现简单查询,输入ID号,查询符合结果的内容

新建一个Silverlight项目,并按照下图新建目录

Command我们用来存放查询用的命令,Model我们用来存放数据,VIEw我们用来存放显示查询的UserControl,viewmodel我们用来存放查询的viewmodel

我们先建立Model层用来存储访问要查询的数据

1 2 3 4 5 public class DataItem {      int ID { get ; set ; } string name { ; } }
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
static DataDemo private static Collection<DataItem> _DataList = null ;   Collection<DataItem> DataList      {          get          {              if (_DataList == )              {                  _DataList = InitDataList(); } return _DataList; } }   Collection<DataItem> InitDataList() { Collection<DataItem> Lists = new Collection<DataItem>(); for ( int i = 0; i < 100; i++) { DataItem item = DataItem(); item.ID = i + 1; item.name = "例子" + (i + 1); Lists.Add(item); } Lists; } }

接下来,我们新建UserControl用来表示查询的页面(VIEw)

12
< UserControl x:Class = "MVVMDemo.VIEw.queryData" @H_400_301@  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" xmlns:local "clr-namespace:MVVMDemo.viewmodel" mc:Ignorable "d" Height "256" WIDth "256" >      GrID x:name "LayoutRoot" >          button "btnSearch" "24" HorizontalAlignment "left" margin "164,8,0" VerticalAlignment "top" "84" Content "搜索" /> TextBox "txtKeyword" "8,monospace!important; Font-style:normal!important; Font-size:1em!important; direction:ltr!important; display:inline!important; color:blue!important">"152" textwrapPing "Wrap" d:LayoutOverrIDes "HorizontalAlignment" /> "txtResult" "240" "VerticalAlignment" /> </ GrID > UserControl >

到这里我们已经建好了Model,VIEw层,接下来,我们建立viewmodel

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 @H_872_502@ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
queryDataviewmodel : INotifyPropertyChanged      #region 变量      /// <summary> /// 查询的数据 /// </summary> private ; /// <summary> /// 查询命令 /// </summary> ICommand _queryCommand = ; /// <summary> /// 搜索关键字 /// </summary> _SearchText = string .Empty; /// <summary> /// 搜索结果 /// </summary> _SearchResult = .Empty; #endregion   #region 属性 /// <summary> /// 搜索关键字 /// </summary> SearchText { { return this ._SearchText; } set { this ._SearchText = value; .PropertyChanged != )                  .PropertyChanged( , PropertyChangedEventArgs( "SearchText" )); } } /// <summary> /// 搜索结果 /// </summary> SearchResult { ._SearchResult; } set { ._SearchResult = value;   ) "SearchResult" )); } } /// <summary> /// 查询命令 /// </summary> public ICommand queryCommand { _queryCommand; } } #endregion   #region 构造函数 queryDataviewmodel(Collection<DataItem> dataList) { ._DataList = dataList; _queryCommand = queryDataCommand( ); } #endregion   #region 方法 /// <summary> /// 查询数据 /// </summary> voID queryData() { (! .IsNullOrEmpty( .SearchText)) { DataItem dataItem = ; foreach (DataItem item in ._DataList) { (item.ID.ToString() == .SearchText) {                      dataItem = item;                      break ; } } (dataItem != ) { .SearchResult = .Format( "ID:{0}\nname:{1}" PropertyChangedEventHandler PropertyChanged;   #endregion }

这是一个很简单的viewmodel,我们定义了两个属性,SearchText表示查询关键字,SearchResult表示查询结果,queryCommand表示查询命令,后面我们会和VIEw绑定。
queryDataCommand还没有实现,接下来我们创建queryCommand

queryDataCommand : ICommand queryDataviewmodel _queryDataviewmodel; queryDataCommand(queryDataviewmodel queryDataviewmodel) ._queryDataviewmodel = queryDataviewmodel; }   #region ICommand 成员   bool CanExecute(object parameter) { true
总结

以上是内存溢出为你收集整理的MVVM(Model-View-ViewModel)实例讲解全部内容,希望文章能够帮你解决MVVM(Model-View-ViewModel)实例讲解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1074254.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存