zoukankan      html  css  js  c++  java
  • Silverlight之我见——数据批示(2)

     接着上一回的话题,继续来研究数据批示特性,先拿简单的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模式下运行程序。

  • 相关阅读:
    Linux 设备驱动 Edition 3(中文版)
    内核和用户空间共享内存的实现例程proc和mmap
    mmap的详细使用(用户空间)
    使用 I/O 内存from LDD3
    关于strcpy、memset、memcpy的使用详解
    get_free_page 和其友
    Linux调试技术介绍
    关于信息时代的学习
    [恢]hdu 1196
    [恢]hdu 1157
  • 原文地址:https://www.cnblogs.com/xieweikai/p/6832807.html
Copyright © 2011-2022 走看看