接着上一回的话题,继续来研究数据批示特性,先拿简单的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,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; } }
不要气馁,继续,还记得在XAML中写的绑定扩展标记不?想起来了吗?
1、默认是单向绑定Mode = Oneway;
2、没有显式设置启用验证。
嗯,这下明白了,再改改
<TextBox x:Name="txtAge" Margin="1,1" Width="165" Text="{Binding Age,Mode=TwoWay,ValidatesOnExceptions=true,NotifyOnValidationError=true}"/>
<sdk:ValidationSummary Grid.Row="3" Grid.ColumnSpan="2"/>
再次按下F5,验证失败后仍然抛出异常,这时候,你可能有些失望。
5、在非debug模式下运行程序。
原文链接: http://www.voidcn.com/article/p-nmvzdmyg-bgd.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。