使用纯XAML标记实现数据验证错误提示
2010-07-02 18:53
225 查看
上一次写了一篇:在WPF中实现数据验证的自定义提示之后,一直觉得这个方案太过勉强,逻辑上也不怎么清晰。苦于前两周要做开题报告,所以一直没来得及做一个好好的研究,这几天终于找到时间来改进那个方案了。考虑到原来的方案将XMAL代码和.net后置代码混合使用,使得验证逻辑很是混乱,所以在这里我用纯XMAL标记来实现验证的呈现,而具体的验证逻辑还是放在了数据类型中。我在这儿提供了两个方案:一个是使用Validation中的ErrorTemplate错误模板来实现一个炫丽的提示框,另一个则是使用了一个Popup提示达到同样的目的。
预备: 仍然先来看看几个比较重要的类型:
1、AdornedElementPlaceholder 类:微软在帮助文档中很描述了这的作用---表示ControlTemplate 中使用的元素,用于指定修饰控件相对于 ControlTemplate 中的其他元素所放置的位置。
这里面我们要用到一个非常重要的属性:
AdornedElementPlaceholder . AdornedElement 属性:
获取此 AdornedElementPlaceholder 对象所引用的 UIElement。 我们要用这个属性来得到Validation附加属性的错误信息。
2、Validation 类:这是一个静态类,用于提供支持数据验证并管理控件的可视状态的方法和附加属性。
同样我们只关注它的附加属性:
Validation. Errors 附加属性:获取与绑定目标元素相关联的 ValidationError 对象的集合。
Validation. HasError 附加属性:获取一个值,该值指示目标元素的绑定是否具有验证错误。
这里有一个前提:那就是我们的数据类是实现了INotifyPropertyChanged,IDataErrorInfo 两个接口。
[b]方案一:定义ErrorTemplate错误面板提示[/b]
1、首先定义一个提示面板:其效果如下
数据连接
最后不要忘记了在Binding在设置ValidatesOnDataErrors为True,这样才能实现数据出现错误的提示。由于Popup控件还定义了一组打开的动画效果,使用它可以得到很动感的提示体验,这是它的一个优势。而对于错误模板使用起来更方便,毕竟内部逻辑我们封装在了Style里,具体那一种方案要好些可就看个人的喜好了,我个人还是建议用错误模板要好些。毕竟有一种开之即可食的感觉。
点击下载 示例代码
预备: 仍然先来看看几个比较重要的类型:
1、AdornedElementPlaceholder 类:微软在帮助文档中很描述了这的作用---表示ControlTemplate 中使用的元素,用于指定修饰控件相对于 ControlTemplate 中的其他元素所放置的位置。
这里面我们要用到一个非常重要的属性:
AdornedElementPlaceholder . AdornedElement 属性:
获取此 AdornedElementPlaceholder 对象所引用的 UIElement。 我们要用这个属性来得到Validation附加属性的错误信息。
2、Validation 类:这是一个静态类,用于提供支持数据验证并管理控件的可视状态的方法和附加属性。
同样我们只关注它的附加属性:
Validation. Errors 附加属性:获取与绑定目标元素相关联的 ValidationError 对象的集合。
Validation. HasError 附加属性:获取一个值,该值指示目标元素的绑定是否具有验证错误。
这里有一个前提:那就是我们的数据类是实现了INotifyPropertyChanged,IDataErrorInfo 两个接口。
[b]方案一:定义ErrorTemplate错误面板提示[/b]
1、首先定义一个提示面板:其效果如下
数据连接
<TextBox x:Name="phoneTxt" TextWrapping="Wrap" Text="{Binding Phone, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" FontSize="18.667" Margin="0,0,-98,0" Height="44" BorderBrush="#FF1A3DA7" Width="198" HorizontalAlignment="Left">
最后不要忘记了在Binding在设置ValidatesOnDataErrors为True,这样才能实现数据出现错误的提示。由于Popup控件还定义了一组打开的动画效果,使用它可以得到很动感的提示体验,这是它的一个优势。而对于错误模板使用起来更方便,毕竟内部逻辑我们封装在了Style里,具体那一种方案要好些可就看个人的喜好了,我个人还是建议用错误模板要好些。毕竟有一种开之即可食的感觉。
点击下载 示例代码
相关文章推荐
- linux 在使用ssh实现内网互联互通时候提示connected by ip 错误的解决方法
- GridView使用技巧之:新增记录、GridView内数据验证、删除信息提示等
- 浅谈在asp.net mvc3中使用IValidatableObject接口实现Model数据验证
- 提交表单报400错误,提示 “您提交的数据无法验证”
- GridView使用技巧之:新增记录、GridView内数据验证、删除信息提示等
- 使用DataAnnotations实现数据验证
- 在WPF中实现数据验证实现自定义的Popup提示
- 使用验证框架实现数据校验
- Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
- 在数据表中使用GUID作主键,新增时提示错误
- 编写OracleMembershipProvider,让SharePoint2007使用Oralce中的用户数据实现Form验证。 (第五天)
- 使用validate.js实现表单数据提交前的验证方法
- 使用sql server management studio 2008 连接数据库,无法查看数据库,提示 无法为该请求检索数据 错误916 - z
- WPF and Silverlight 学习笔记(二十二):使用代码实现绑定、绑定数据的验证
- oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决
- 关于错误提示:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案
- 使用AutoCompleteTextView与SharedPreferences实现自动提示历史数据
- 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误
- 使用sql server management studio 2008 连接数据库,无法查看数据库,提示 无法为该请求检索数据 错误916
- WPF and Silverlight 学习笔记(二十二):使用代码实现绑定、绑定数据的验证