,数据验证对于所有类型的数据驱动应用程序和网站来说都是非常非常重要的。它是一个净化过程,确保只有有效数据被保存到数据库中。所以,今天我将讨论Silverlight中的数据验证。默认情况下,当数据绑定系统遇到与不正确输入相关的错误时,silverlight不会给出任何视觉反馈。但是它做的是在内部拒绝数据。此时,用户会觉得数据已经保存。但事实并非如此。我同意你的看法,这是误导。在这种情况下我们能做什么?是的,如果silverlight数据绑定引擎在违反规则时通过可视化反馈通知或警告我们,那就太好了。让我们从一个简单的应用程序开始,这个应用程序将为将来进一步研究数据验证提供一个简单的基础。,步骤1:创建一个silverlight应用程序,并将以下Student类添加到项目中。步骤2:打开后面的MainPage.xaml.cs代码,并修改MainPage()构造函数,它应该类似于下面的部分。LayoutRoot是我们的网格容器。,步骤3:好了,XAML。下面一节介绍UserControl标记之间的内容。第4步:运行应用程序并键入年龄文件中的任何字符串,然后尝试将光标移动到其他控件。正如预期的那样,内部验证通过拒绝无效输入而没有视觉反馈而发生。但我们想要视觉反馈,让我们看看可以做什么来实现这种“视觉反馈”或“错误消息”。第5步:validatesonexception是实现所有类型验证的第一步。ValidatesOnExceptions = True,这样可以确保silverlight会为验证错误提供可视化的反馈。此属性告诉绑定引擎,如果在数据传输到基础数据源期间发生任何类型的异常,则将该异常视为验证错误。在下列情况下,Silverlight报告验证错误,类型转换失败。在绑定对象的设置访问器时发生错误。当一个双向绑定控件(在我们的例子中,文本框)失去焦点时,值被更新到源。现在看看修改后的文本框的XAML:第6步:运行应用程序,在age文件中键入任何字符串,并尝试将光标移动到其他控件上。这就像魔术一样,现在我可以看到来自Silverlight应用程序的视觉反馈,这是关于错误的数据类型。但这对我来说还不够,我想对年龄字段进行范围验证(0到100)。不要感到无聊,你可能想知道Sumon先生为什么进展缓慢?伙计,我就是这么做的。让我们继续…,步骤7:现在是修改现有Student类的时候了。修改年龄属性设置器。,第8步:运行应用程序,在这个阶段年龄字段能够处理两种类型的验证(无效数据类型和范围验证)。既然我们清楚了这一点,我渴望更多的冒险,请跟着我走。我现在想要的是,当有一个无效的输入在年龄字段,我希望文本框有黄色的背景,并通过工具提示显示错误消息。我只是展示了不同的方法但是这取决于你们的想象力。步骤9:NotifyonValidationError = True,这使得绑定引擎在异常期间引发BindingValidationError事件。这是一个路由事件,可以由目标控件或父容器处理(更实际)。再次修改文本框的XAML,因此,我将BindingValidationError事件附加到网格容器。父级或容器级的处理程序可以对多个子元素执行验证。,第10步:到目前为止,我们有相对的视觉错误反馈,但我们需要更多的控制!在BindingValidationError处理程序中,我们可以指定更多的验证操作。在我们的例子中,需要的操作是,使背景为黄色,并使用错误控件的工具提示显示错误消息。第11步:我等不及要运行这个应用程序了。,我很高兴地看到,单个控件正在显示相关的错误消息并执行额外的活动。我有了另一个想法,如果我能在一个地方以摘要的格式显示所有的错误消息就好了。这听起来有什么意思吗?是的,我们可以通过Silverlight中的ValidationSummary控件来实现这一点。步骤12:ValidationSummary名称空间: System.Windows。控制装置:System.Windows.Controls.Data。输入(在system . windows . control . data .Input.dll)使用ValidationSummary控件我们可以显示一个统一的验证错误列表。默认情况下,控件显示其父控件的错误容器控制。要指定一个不同的容器,我们必须设置目标属性。目标属性默认为空。快速步骤:添加对system . windows . control . data的引用。输入在XAML标记中声明名称空间。最后插入ValidationSummary控件标签。第13步:运行应用程序应该给你以下一个。,文本框在失去焦点时进行验证,如果数据有效,则会反映到数据源上,否则会被拒绝,这是默认行为。但我希望数据传播和验证只发生在我单击save按钮时,而不是文本框失去焦点时。这意味着我必须改变默认的行为。这可以使用绑定对象的UpdateSourceTrigger属性来完成。步骤14:UpdateSourceTrigger UpdateSourceTrigger接受两个值:默认的显式UpdateSourceTrigger = Default表示自动更新到目前为止正在执行的操作。UpdateSourceTrigger =显式,禁用对绑定源的自动更新。这意味着,从现在开始,您必须手动更新源代码。当用户想要在数据传播到源和按需验证之前执行某种活动时(例如,在我们的例子中按钮点击事件),这是有用的,而不是当文本框失去焦点时。,,步骤15:现在我们将看到如何手动更新源,从而触发验证过程。当用户键入无效数据并移动到其他控件时,不应该进行验证。现在验证只在单击按钮时发生。这是一篇分几部分的文章,我想休息一下。我的下一篇文章将基于以下主题:使用IDataErrorInfo和INotifyDataErrorInfo(这是Silverlight 4的新特性)进行数据注释验证,已经迫不及待地开始本文的第二部分了。快乐的编码。下载:SourceCodeProject 本文转载于:http://www.diyabc.com/frontweb/news448.html