Silverlight之我见——数据批示(2)
来源:互联网 发布:单片机复位键怎么接 编辑:程序博客网 时间:2024/05/22 03:35
接着上一回的话题,继续来研究数据批示特性,先拿简单的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模式下运行程序。
- Silverlight之我见——数据批示(2)
- Silverlight之我见——数据批示(2)
- Silverlight之我见——数据批示(1)
- Silverlight之我见——数据批示(1)
- Silverlight之我见——DataGrid数据验证
- Silverlight之我见——DataGrid数据验证
- Silverlight之我见——制作星星闪烁动画
- Silverlight之我见——制作星星闪烁动画
- NOKIA支持SILVERLIGHT之我见
- 数据存储之我见
- 大数据之我见
- KMeans——之我见
- 数据建库之我见
- 通用数据访问之我见
- 数据服务业务之我见
- iOS 数据存储之我见
- SilverLight:一步一步学Silverlight 2系列(1):数据与通信之WebClient
- (12):Silverlight 2 数据与通信之WebClient
- minimal rebuild failure, reverting to normal build解决方法
- Android菜单详解
- 大家一起来探讨下在web中显示上传进度的问题
- Main
- c/c++里的 堆区 栈区 静态区 文字常量区 程序代码区
- Silverlight之我见——数据批示(2)
- NYOJ 114 某种序列
- 看Sybase官方手册学索引工作原理
- 图标icons网站--各种很好用的图标
- main.xml Design显示不是设计界面,而是view属性的解决办法
- 13. The Greenwood boys
- Linux最多支持的SCSI Disk的数目
- 将NSString转换编码集变为GBK或GB2312
- Android开发中Menu的理解