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

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

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-11 05:07:59 | 显示全部楼层 |阅读模式
在前一篇介绍中简单实现了MVVM模式,这一篇中我想补充一下关于Event To Command的内容。

点击人的时候弹出框显示人的信息,这一功能主要用到了 GalaSoft.MvvmLight 中EventToCommand的CommandParameter属性,用它来绑定ListBoxItem的数据源并传回给相应的command。

以下是截图:

DSC0000.jpg

知识点:

1. 在前一篇文章中我提供了ContactsList.xaml的布局代码,代码里提供了Loaded事件对应的Command,这里的一个小小改动就是增加了ListBoxItem的SelectionChanged事件Command,以及如何将ListBoxItem对应的数据源(Person对象)传递给相应的Command。以下是相应的ContactsList.xaml代码改进部分



DSC0001.gif DSC0002.gif 增加SelectionChanged




            
               
                    
               
            
            
               
               
                    
               
               
               
                    
               
            
        




2. 做这个功能的时候我对Command的设计做了少许改进,

   A.建立一个CommandBase



CommandBase类



public class CommandBase:ICommand
    {
        Action Excuted;
        Func CanExcuted;
        bool CanExcuteCache = false;
        protected CommandBase(Action excuted, Func canExcuted)
        {
            this.Excuted = excuted;
            this.CanExcuted = canExcuted;
        }
        public bool CanExecute(object parameter)
        {
            bool tmp = this.CanExcuted(parameter);
            if (this.CanExcuteCache != tmp)
            {
                this.CanExcuteCache = tmp;
                if (this.CanExecuteChanged != null)
                    this.CanExecuteChanged(this, new EventArgs());
            }
            return tmp;
        }
        public event EventHandler CanExecuteChanged;
        public void Execute(object parameter)
        {
            this.Excuted.Invoke(parameter);
        }
    }


   B. 实际的Command类型



实际Command类



public class UserSelectionChangedCommand : CommandBase
    {
        public UserSelectionChangedCommand(Action excuted, Func canExcuted)
            :base(excuted, canExcuted)
        {
        }
    }


   这样的设计使command的使用及维护更加灵活

3. 对应的VM()里对使用到的Command进行实例化,并提供相应的Command处理方法,下面是设计之后的实例化Command部分





实例化Command及执行方法



public ContactsListViewModel()
        {
            this.LoadedCommand = new ShowMessageCommand(this.DoWorkOnLoaded, this.CanExcute);
            this.SelectionChanged = new UserSelectionChangedCommand(this.UserSelectionChanged, this.CanExcute);
        }
        public ShowMessageCommand LoadedCommand { get; private set; }
        public UserSelectionChangedCommand SelectionChanged { get; private set; }
#region Commands
        void DoWorkOnLoaded(object str)
        {
            System.Diagnostics.Debug.WriteLine("loaded>>>>   " + DateTime.Now.ToShortDateString());
        }
        bool CanExcute(object parameter)
        {
            return true;
        }
        void UserSelectionChanged(object obj)
        {
            Person p = obj as Person;
            MessageBox.Show("you choose: " + p.Name + " " + p.Tel);
        }
#endregion




4. 源码下载

运维网声明 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-65626-1-1.html 上篇帖子: Windows Phone 7之初体验(六.完整版模拟器) 下篇帖子: Windows Phone 7 Starting
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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