接着上一回的话题,继续来研究数据批示特性,先拿简单的RageAttribute来弄弄,接着上次的示例,添加一个Age属性,并加上RangeAttribute。

[Range(20,60,ErrorMessage="年龄范围在20与60之间。")] [Display(Name="年龄",Description="歌手年龄。")] public int Age { get; set; }

接着把XAML也补完整。

<sdk:Label x:Name="lbAge" Target="{Binding ElementName=txtAge}" Grid.Column="0" Grid.Row="2" FontSize="14" Margin="1,1,20,1"/> <StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal"> <TextBox x:Name="txtAge" Margin="1,1" Width="165" Text="{Binding Age}"/> <sdk:DescriptionViewer Target="{Binding ElementName=txtAge}"/> </StackPanel>

是不是可以了呢?
运行一下,定义的范围在20-60,现在输入100,然后把焦点文本框移走,结果发现,没有发生验证。
 
好,简单的不行,继续探索,把属性的定义改成这样:

int m_Age = 20; [Range(20, 60, ErrorMessage = "年龄范围在20与60之间。")] [Display(Name = "年龄", Description = "歌手年龄。")] public int Age { get { return this.m_Age; } set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Age" }); this.m_Age = value; } }

然后再次运行,哟,上帝!还是不行,怎么了?Validator的验证方法也调用了,为什么还不行呢?
不要气馁,继续,还记得在XAML中写的绑定扩展标记不?想起来了吗?
1、默认是单向绑定Mode = Oneway;
2、没有显式设置启用验证。
嗯,这下明白了,再改改
 
<TextBox x:Name="txtAge" Margin="1,1" Width="165" Text="{Binding Age,Mode=TwoWay,ValidatesOnExceptions=true, NotifyOnValidationError=true}"/>

再运行,这回验证了,但是,抛出了异常。那有没有办法不抛出异常而显示友好的错误提示呢?答案当然有,使用ValidationSummary 。

<sdk:ValidationSummary Grid.Row="3" Grid.ColumnSpan="2"/>


再次按下F5,验证失败后仍然抛出异常,这时候,你可能有些失望。

山重水复疑无路,柳暗花明会成功,这时候,你在项目上右击,选择“在浏览器中查看”,啊,眼前一亮,出来了。

现在,总结一下方法:

1、在定义公共属性时加上对应的特性,如RangeAttribute;

2、在属性的set访问器上调用Validator的ValidateProperty方法;

3、在XAML或前台绑定时,将Binding 的Mode设置为TwoWay,ValidatesOnExceptions和NotifyOnValidationError设置为True;

4、添加ValidationSummary控件以显示错误列表,当然,不加也可以,看看下面的截图。

5、在非debug模式下运行程序。

转载于:https://www.cnblogs.com/tcjiaan/archive/2011/12/12/2422680.html

Silverlight之我见——数据批示(2)相关推荐

  1. Silverlight – Datagrid,Dataform数据验证和ValidationSummary

    上一篇,我们讨论了,捕获用户提交数据验证.本篇将集中讨论Datagrid和Dataform两个数据控件的数据验证方法,其中,我们会附加介绍一个新的验证控件ValidationSummary. 概述 D ...

  2. SilverLight之我见

    SliverLight 是微软公司全力打造的一种跨平台,跨浏览器的RIA新技术,SilverLight以XAML为界面呈现语言,支持2D图形,文字,动画,数据双向绑定,控件风格与模板,Linq,WCF ...

  3. WPF及Silverlight中将DataGrid数据导出

    这段源码是我在项目中实际应用的源码,没有经过删减及处理. 如果你认为有用可以摘去作为自己的导出类中的一个小工具使用. /// <summary>     /// 数据源导出辅助类      ...

  4. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月12日-12月18日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(12月12日-12月18日) 本周Silverlight学习资源更新 Silverlight学习小记 阿里山地方 ...

  5. Silverlight入门:第三部分 - 数据访问

    现在我们已经有了一个基础布局,同时也在上面放了一些控件,接下来让我 们开始获取数据.因为我们想要搜索Twitter上的内容,所以我们需要充分使用 他们提供的Web服务API.在继续之前,我要先说明在本 ...

  6. Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary

    上一篇,我们讨论了,捕获用户提交数据验证.本篇将集中讨论Datagrid和Dataform两个数据控件的数据验证方法,其中,我们会附加介绍一个新的验证控件ValidationSummary. 概述 D ...

  7. (转)Silverlight数据校验之INotifyDataErrorInfo

    原文地址:http://www.cnblogs.com/PerfectSoft/archive/2012/03/01/2375007.html 在Silverlight中,数据实体类的有效性校验有多种 ...

  8. Silverlight实例教程 - Validation数据验证基础属性和事件

    上篇介绍了Silverlight的Validation数据验证的好处和概述,其中了解到Silverlight数据验证方法可以被抽象为语法验证和语义验证,其中前者是通过数据类型定义对比验证,而后者是通过 ...

  9. Silverlight实用窍门系列:58.Silverlight中的Binding使用(三)-数据集合绑定

      在本文中将以ListBox为例讲述在Silverlight中Binding数据集合. 在这里我们将实体集的绑定分为三类:    一.直接控件绑定.    二.DataTemplate模板绑定.   ...

最新文章

  1. python数据接口设计_python之接口与归一化设计
  2. Python解决ModuleNotFoundError: No module named ‘Queue‘的问题
  3. IOS代码实现常用控件UIButton、UISlider、UISwitch、UISegmentedControl
  4. oracle不一致性关闭下次,Oracle DataGuard
  5. Gora官方文档之二:Gora对Map-Reduce的支持
  6. 在BurpSuite中安装Jython环境
  7. Google Analytics(分析)
  8. 链表简单实现(增删查改)
  9. 数组concat_js 标准二维数组变一维数组的方法
  10. 【软件工程】 详细设计
  11. 技巧:删除桌面上提示找不到该项目的文件
  12. keyword can not be an expression
  13. 《看美女不掉头发》【C语言】求一个数是否为素数的四种方法
  14. 白帽黑客必备的网络安全基础问答
  15. 2020年精选网络性能监控系统
  16. h5 神策埋点_神策埋点思路
  17. 什么是关联分析?如何利用关联规则做好数据挖掘
  18. 橘子识别java_Java方法
  19. python 二维强度图_Python简单做二维统计图
  20. Cg学习记录003 之Varying参数

热门文章

  1. 全职宝妈做自媒体怎么样
  2. 你根本就不需要认识这么多大佬
  3. 联通突然从4g变成3g了_老人机真不能用了?!联通逐渐关闭2G、3G信号服务
  4. 如何使用T-SQL生成随机SQL Server测试数据
  5. sql server 性能_SQL Server性能基础
  6. ImageMagick 将PDF转图片命令
  7. json序列化定义类型jsckson
  8. OpenBUGS抽样数据基本操作
  9. 【POJ2411】Mondriaan's Dream
  10. php随笔10-thinkphp 3.1.3 模板继承 布局