MVVM模式完整实例_第1页
MVVM模式完整实例_第2页
MVVM模式完整实例_第3页
MVVM模式完整实例_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MVVM模式主要是为了实现视图和逻辑的分离,通常在实现的例子之中,在ViewModel一层会使用RealCommand,下面是我在网上根据实践,得到的完整实例,和大家分享一下一、首先是在数据部分,即Model层是数据部分,数据来源不限。在此定义person类,其中包括所用的基本属性。publicclassPerson(privatestring_Name;publicstringName{get(return_Nanie;}set{_Name=value;}}"privateint_Age;publicintAge{get{return_Age;}set{_Age=value;}}"publicPerson(stringnantejintage){this.Name二name;this.Age=age;下面的类存放整个数据列表,并为了进行测试,进行了简单的初始化工作。publicclassPersons{List<Person>personList=newList<Person>():publicPersons(){personList.Add(newPerson33));personList.Add(newPerson22));personList.Add(newPerson^Koll^j33));personList.Add(newPerson("Mark^j22));}publicList<Person>GetPersons(){returnpersonList;}二、在ViewModel层,实现数据和界面之间的逻辑,在类中,包括了属性和命令,都将与界面进行数据绑定,其中Command只能与具有Comman属性的控件进行绑定,否则就要采用其他的方式,但是在这里使用的是按钮,所以可以进行。实现命令时,自定义命令时要实现ICommand接口,在UI界面中,一般会继承RouteCommand或是RouteUICommand,这都是有弊端的,所以大家一般采用,自定义一个RelayCommand,下面是基本代码,但是要注册多个命令时,定义将会有所改动。privateAction_handler;publicRe1ay11Conunand(Actionhandler){—handler=handler;}"privatebool_isEnabled;publicboolIsEnabled{get{return_isEnabled;}set{if(value!=_isEnabled){"_isEnabled=value;if(CanEKecuteChanged!=null){CanEsecuteChanged(thiEventArgs.Empty);}}}}publiceventEventHandlerCanExecuteChanged;publicboolCanEsecute(objectparameter){returnIsEnabled;}publicvoidEsecute(objectparameter)ViewModel的定义代码如下:classPerson?iewMode1:INotifyFropertyCharL^ed{ffregiunPruper1edpublieeventPropert3<h:iTLgeilEventHmhicIIerPropertj.<h:ifLged;SendregionffregiunPropertiesprivatestrins_searchTeKt;/y查询关键字publicstrinsSearch?ext{get{return_searchTeKt;}set[_searchTe>:t=value:if(PrupertyChanged!=nul1)this.PropertyChaiiEed(thi*newPropertyCharLEeilEventArgs("SearchText"));privateList<Persun>_resultTest:〃查询结果 -publicList<Person>ResultTestget{return_resultTest:}set{_resuitTest二value;if(PropertyChan氏ed!=nul1){PropertyChanged(thi司newPropertyChaiigeliEventArgs(''EesuitTevt,v));privateIC0JTLJTL:di_Ld_cmd;publicICuITLJTL:irLdCmd{set{return_cmd:}}一#endregionSregion构造函数publiePersun7iewMcniel(){HuiTL:di_L=newList<Persun>();HuirL:di_L=newPersons().GetPersons();IsEnabled=true}:_cmd=newRe1ay11CunuTL^id(Searhins)}"'IsEnabled=true}:#region构造函数publicPersonViewModel(){HumarL=newList<Person>();Huntan=newPersons().GetPersons():_cmd=newRelay1lCommand(Searhing){IsEnabled=true};}~#endregionpublicList<Person>Human;publicvoidSearhing(){List<Person>person=null:if(!string.IsNul10rEmpty(SearchTest)){person=newList<Person>():foreach(PersonpinHuman){if(p.Name.Contains(SearchTest)){person.Add(p);if(person!=null){ResultTest=person;}}}三、其中在View和ViewModel层之间是通过数据绑定联系在一起的。View层的xaml文件代码:<Grid><Grid.RowDefinitions>■CRuwDefinitionHeight=,v50,v></EuwDefmitiun>■xRuwDefiniticmHeight=,T*"></FjjwDefinitiun></Grid.RuwDefmitiuns><Grid.CulujTLriljefinitiuns><CuluiiLfLDefinitionWidth='v150,vX/ColuirmDefinitiun><CulujiLfiDefiniticmWidth=":*;'></Culujnnl〕已finitiun></(trid.CuluuiLriljefinitinns><DataGridGrid.Ru!i.f=,v1"'Grid.CuIujiltlSp:ii_L=,v2N:dJTie='vdataGrid"'ItemsSource="{BmdingResuitText}"Height="200"HorizontalAligrunent="Center"VerticalAligrjTLent='vTop,vWidth='300,v></DataGrid><TextEozGrid.CulujTLfL='vO,vGrid.Rui.|1f='v0,vNam已二“tMt1*Heigl-Lt='v20,vTeAt='v{BindingSearchTestjMode=TwoWa]/}"HorizontalAligrunent="Center,TWidth=100"'></TextBuK><ButtunGr1d.Culumn=,v1,vGrid.,v0"Cuntent=''Eutton,vHeight="2ID*HorizuntalAligrunent=,vLeft"Msjtle=,vbuttonlVerticalAligrunent=,TCenter"Width="64"C曰

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论