设为首页 收藏本站
查看: 437|回复: 0

MVVM模式在Windows Phone 7上的简单实现

[复制链接]

尚未签到

发表于 2015-5-10 13:27:26 | 显示全部楼层 |阅读模式
做WPF/Silverlight/Windows Phone 7 这种Markup+Code类型的项目,程序员和Blend的Designer配合起来有时候真是一个“抓狂”,最近研究了MVVM模式后深切体会到这个模式的优越性,我研究不不是很深,希望走过路过的高手多多指教!

先贴个图:

DSC0000.jpg



按照MVVM模式的思想编写的程序应该在思想上抛弃Xaml文件的code behind(即xaml.cs)文件,这样才能让coder和designer各尽其能。coder需要做的就是在designer设计好的xaml文件里对UI控件的值进行Binding,这里应该会用到Command和Behavior。

在我要做到例子里,我需要对UI的Event监听,实现方法将event绑定到Command(这里需要用到一个MVVM Light Toolkit框架, GalaSoft.MvvmLight, 此下载的文件中包括WPF/Silverlight/WP7的dll版本),而不是用原来的注册event事件(当然这也是MVVM的思想)。关于MVVM Light Toolkit,可以看这篇文章。

接下来我开始展示一个小Demo:

1. 首先看一下我的项目目录及引用的程序集:

DSC0001.png

2. view里的ContractsItem, 这个view是展示每个联系人的控件,这个控件很简单,只是简单的绑定了姓名和电话  



DSC0002.gif DSC0003.gif View Code



1   
14     
15         
16     
17   
18     
19         
20            
21                 
25            
26         
27         
28         
29            
30            
31         
32     
33  


3. view里的ContractsList.xaml,这个view负责显示所有的联系人列表,列表的数据加载方式有两种,一种是用command绑定viewmodel的command,另一种是让viewmodel实现IEnumerable接口,这两种方法我都例子里都会有所显示





View Code



1
17
18     
19                  
20            
21                 
22                                   
23                 
24            
25            
26            
27         
28         
30         
35            
36                 
37                     
38                 
39            
40            
41            
42                 
43                     
44                 
45            
46         
47     
48  




4. ViewModel: ContactsListViewModel.cs 类中定义了Command及IEnumerable的方法



View Code



1 using System;
2  using System.Net;
3  using System.Windows;
4  using System.Windows.Controls;
5  using System.Windows.Documents;
6  using System.Windows.Ink;
7  using System.Windows.Input;
8  using System.Windows.Media;
9  using System.Windows.Media.Animation;
10  using System.Windows.Shapes;
11 using System.Collections.Generic;
12 using TwitterPlatform.Model;
13 using System.Collections.ObjectModel;
14 using System.ComponentModel;
15 using TwitterPlatform.Commands;
16
17 namespace TwitterPlatform.ViewModel
18 {
19     public class ContactsListViewModel : IEnumerable
20     {
21
22         public ContactsListViewModel()
23         {
24             this.LoadedCommand = new ShowMessageCommand();
25         }
26
27         public ShowMessageCommand LoadedCommand { get; private set; }
28
29         //GetEnumerator() 加载数据
30         public IEnumerator GetEnumerator()
31         {
32             var l = new List(){
33                         new Person() { Name="Michael", Tel="1234567890" },
34                         new Person() { Name="dali", Tel="1234567890" },
35                         new Person() { Name="houjun", Tel="1234567890" },
36                         new Person() { Name="tony", Tel="1234567890" },
37                         new Person() { Name="jing", Tel="1234567890" },
38                         new Person() { Name="Joel", Tel="98564875" }
39                     };
40             l.Sort();
41             return l.GetEnumerator();
42         }
43
44         System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
45         {
46             return this.GetEnumerator();
47         }
48     }
49 }






5. Person类里只定义了Name和Tel两个属性~~

6. 最后是负责显示list的MainPage 了,在这个page里我用了个Paronama,小戏一下呵呵



View Code



1  
5         
6            
7                 
8                     
9                 
10                 
11                     
12                 
13                 
14
15                 
16                 
17
18                 
19            
20
21         
22     
23  




以上就是这个小小的Demo,简单的实现了MVVM模式,在这个Demo里主要实现了Event To Command,也是MVVM模式经常用到的东西。

如果有时间我会再做一个更加详细的大一点点demo,呵呵

欢迎讨论~~



源码下载

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65476-1-1.html 上篇帖子: 硬盘安装Windows 7方法大全 下篇帖子: Windows phone 7之hello world
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表