您的位置:首页 > 其它

使用纯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、首先定义一个提示面板:其效果如下

数据连接

<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里,具体那一种方案要好些可就看个人的喜好了,我个人还是建议用错误模板要好些。毕竟有一种开之即可食的感觉。

点击下载 示例代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐