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

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

接着把XAML也补完整。

  1. <sdk:Label x:Name="lbAge" Target="{Binding ElementName=txtAge}" Grid.Column="0"
  2. Grid.Row="2" FontSize="14" Margin="1,1,20,1"/>
  3. <StackPanel Grid.Column="1" Grid.Row="2" Orientation="Horizontal">
  4. <TextBox x:Name="txtAge" Margin="1,1" Width="165"
  5. Text="{Binding Age}"/>
  6. <sdk:DescriptionViewer Target="{Binding ElementName=txtAge}"/>
  7. </StackPanel>
是不是可以了呢?
运行一下,定义的范围在20-60,现在输入100,然后把焦点文本框移走,结果发现,没有发生验证。
 
好,简单的不行,继续探索,把属性的定义改成这样:
  1. int m_Age = 20;
  2. [Range(20, 60, ErrorMessage = "年龄范围在20与60之间。")]
  3. [Display(Name = "年龄", Description = "歌手年龄。")]
  4. public int Age
  5. {
  6. get { return this.m_Age; }
  7. set
  8. {
  9. Validator.ValidateProperty(value,
  10. new ValidationContext(this, null, null) { MemberName = "Age" });
  11. this.m_Age = value;
  12. }
  13. }
然后再次运行,哟,上帝!还是不行,怎么了?Validator的验证方法也调用了,为什么还不行呢?
不要气馁,继续,还记得在XAML中写的绑定扩展标记不?想起来了吗?
1、默认是单向绑定Mode = Oneway;
2、没有显式设置启用验证。
嗯,这下明白了,再改改
 
  1. <TextBox x:Name="txtAge" Margin="1,1" Width="165"
  2. Text="{Binding Age,Mode=TwoWay,ValidatesOnExceptions=true, NotifyOnValidationError=true}"/>
再运行,这回验证了,但是,抛出了异常。那有没有办法不抛出异常而显示友好的错误提示呢?答案当然有,使用ValidationSummary 。
  1. <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模式下运行程序。

Silverlight之我见——数据批示(2)的更多相关文章

  1. Silverlight之我见——数据批示(1)

    第一次听到这个概念,你是否有点陌生?MSDN上也没有特意的去说明.不要看到这个名词不太熟悉,其实数据批示,玩过C#的人都会非常熟悉,所谓数据批示,其本质就是特性(Attribute),怎么样,现在有点 ...

  2. 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

    原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...

  3. Silverlight之我见——DataGrid数据验证

    <UserControl x:Class="DataValidationSample.MainPage" xmlns="http://schemas.microso ...

  4. Silverlight之我见

    好长时间没搞Silverlight方面的开发了,原本都以为自己早已忘记,然而前阵子(确切一点说,是挺长时间以前了)的时候,发布Windows10的时候,微软宣布新的浏览器将重新开发,关键是后半句引起了 ...

  5. silverlight中datagrid数据到处excel

    首先新建一个DataGrdiExtensions类,代码为: public static class DataGridExtensions { /// <summary> /// 导出dg ...

  6. Silverlight DataGrid自适应数据

    silverlight的DataGrid如果改成fill模式 那么当数据超长也不会出现横向滚动条 如果改成按单元格模式 如果数据较短又会出现空白的地方 所以我自己写了个算法 目前实现了以list为数据 ...

  7. Silverlight保存大数据到WCF出现Not Found问题

    Silveright调用WCF保存大数据时,直接在客户端报“ 远程服务器返回了错误:Not Found ”问题,少量是没问题,如下图: 后面在这个文章中找到解决办法: http://www.cnblo ...

  8. silverlight,动态数据集合中,移除动态集合自身的内容

    在xaml的页面上创建一个x:Name为_list1的ListBox,其中ListBox里面的每一项是ListBoxItem if (_list1.SelectedItem == null)//如果_ ...

  9. silverlight中DataGrid数据高亮显示

    效果如图所示, <UserControl xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.W ...

随机推荐

  1. caffe to tensorflow alexnet model

    from kaffe.tensorflow import Network class AlexNet(Network): def setup(self): (self.feed('data') .co ...

  2. [SCOI 2010] 连续攻击游戏

    [题目链接] https://www.luogu.org/problemnew/show/P1640 [算法] 二分图匹配 实现时需要常数优化和特判 [代码] //code by byf and lm ...

  3. 洛谷 P4149 [ IOI 2011 ] Race —— 点分治

    题目:https://www.luogu.org/problemnew/show/P4149 仍然是点分治: 不过因为是取 min ,所以不能用容斥,那么子树之间就必须分开算,记录桶时注意这个: 每次 ...

  4. Vue Router的params和query传参的使用和区别

    vue页面跳转有两种方式分别是:name和path this.$router.push({name: 'HelloWorld2}) this.$router.push({path: '/hello-w ...

  5. phonegap在eclipse上的安装

    1.首先安装好eclipse 2.下载安装好sdk 3.下载安装好adt 4.在这个地方下载好phonegap的包,https://codeload.github.com/phonegap/phone ...

  6. JSP所需要掌握的部分

    JSP基本语法 指令 <%@ 指令%> JSP指令是JSP的引擎 主要的两种指令是page和include(taglib) <%@ page import="java.ut ...

  7. SVN系列学习(一)-SVN的安装与配置

    1.SVN的介绍 SVN是Subversion的简称,是一个开发源代码的版本控制系统,采用了分支管理系统. 文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器.你可 ...

  8. Tomcat发布项目,域名访问

    域名访问项目 1,去掉访问路径的端口号: 找到 Tomcat 下的 conf 文件中的 server.xml,找到 8080 修改成 80, 2,项目绑定域名: <Host name=" ...

  9. Jquery 可拖拽的Ztree

    比较懒,就只贴关键代码吧,自己把有用的属性全部打印出来了,也加了不少注释. 保存后涉及到的排序问题,刷新问题还未考虑到,后面有的话再加. $.fn.zTree.init($("#ztree& ...

  10. Oracle12C用户创建、授权、登录

    Oracle12C用户创建.授权.登录 1.以系统用户登录 C:\Users\LEI>sqlplus sys/dwh as sysdba; SQL*Plus: Release 12.1.0.2. ...