
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 { ; } } |
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)
< 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" GrID > UserControl > |
到这里我们已经建好了Model,VIEw层,接下来,我们建立viewmodel
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
以上是内存溢出为你收集整理的MVVM(Model-View-ViewModel)实例讲解全部内容,希望文章能够帮你解决MVVM(Model-View-ViewModel)实例讲解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)