登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

╰☆╮-----独木小军----╭☆╯

【小军的网易博客】茫茫人海,相遇是缘。我的微信 zyj--wx 一起学编程

 
 
 

日志

 
 
关于我

在城市中漂泊,我们只是沧海一栗,为了梦想而生、为梦想而努力!坚持自己的梦想,认真做好每一件事! 为了我们的理想,坚持、努力、不放弃,让我们一起加油!关注:weibo.com/gtjun

MVVM模式中的两种数据验证方式  

2012-11-27 15:03:14|  分类: WPF/Silverlight |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 本文来自小军网易博客:http://ulfqbpl.blog.163.com/(转载请复制本文)

前言:关于数据验证,无非就是将错误信息显示在页面上,使用户以看到,但它的实现方法也是一大技术难点。本文将针对Silverlight的MVVM设计模式的数据验证展开探讨,目的是将错误信息显示在页面上(具体验证不讲)。
 
 
 
>>>第一种方法(适用于Silverlight4之前的版本):
实现接口 IDataErrorInfo,INotifyPropertyChanged
以下是接口的成员以及实现方式:
        //返回错误的信息(主要是用来显示所有属性错误信息的合集,一般我们习惯在每个控件后面显示该属性错误信息,故返回null)
        public string Error
        {
            get { return null; }
        }
        //返回某个属性的错误信息(该方法十分重要,由系统调用,如果返回null则不显示错误信息,否则显示该错误提示)
        public string this[string columnName]
        {
            get {
                if (columnName == "Name")
                    return "验证失败";
                else
                    return null;
            }
        }
        //属性验证完成后必须调用该通知
        public event PropertyChangedEventHandler PropertyChanged;
 
 
>>>第二种方法(适用于Silverlight4以上的版本):
实现接口 INotifyDataErrorInfo
以下是接口的成员以及实现方式:
        //当验证完成后必须调用该通知
        public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
        //显示某个属性的验证错误信息,返回值说明同上
        public System.Collections.IEnumerable GetErrors(string propertyName)
        {
            if (propertyName == "Name")
                return new string[] { "验证失败" };
            else
                return null;
        }
        //获取一个值,表示是否有验证失败信息
        public bool HasErrors
        {
            get { return true; }
        }
 
使用时必须在页面上设置:
{Binding Name,ValidatesOnNotifyDataErrors=True,ValidatesOnDataErrors=True}
 
 
可以看出以上两上方法,在本质上没有什么区别,都是验证、设置验证错误信息、通知页面更改,只是第一种方法借助INotiflyPropertyChanged接口来实现通知,而第二种方法自带通知事件。
 
 
 
  评论这张
 
阅读(1149)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018