博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight之我见——数据批示(2)
阅读量:6332 次
发布时间:2019-06-22

本文共 1653 字,大约阅读时间需要 5 分钟。

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

 

转载地址:http://ranoa.baihongyu.com/

你可能感兴趣的文章
RH135-2-command-line-interface
查看>>
浅谈OS
查看>>
mac下开启docker API远程调用
查看>>
tar 命令的详解
查看>>
Cisco路由器安全配置
查看>>
第十次作业
查看>>
给定一个字符串s,返回去掉子串"mi"后的字符串。
查看>>
Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
查看>>
Wrod中超链接的一些技巧
查看>>
我的友情链接
查看>>
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
df -h 卡住
查看>>
[转] createObjectURL方法 实现本地图片预览
查看>>
JavaScript—DOM编程核心.
查看>>
JavaScript碎片
查看>>
Bootstrap-下拉菜单
查看>>