博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
silverlight数据验证
阅读量:4331 次
发布时间:2019-06-06

本文共 4712 字,大约阅读时间需要 15 分钟。

 

silverlight的数据验证有几种方式,现在我学习了2种方式,下面是自己的一点实际操作,但是会很详细地列出来,希望给各位同是silverlight新手的人们一点思路

(1)新建验证类

我们新建项目“validation2demo”

1.在mainpage.xaml下建一个textblock 和一个textbox

2.在validation2demo项目下新建一个User.cs 的类

代码如下,里面有一些注释,我也还没有深入理解

using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using System.ComponentModel;using System.ComponentModel.DataAnnotations;namespace validation2demo{    //INotifyPropertyChanged在System.ComponentModel;命名空间下    //INotifyPropertyChanged只是.net自己提供的一个用于通知数据变更的接口    public class User:INotifyPropertyChanged    {        public event PropertyChangedEventHandler PropertyChanged;//当你在类里调用PropertyChange()的时候,外面的函数就可以响应了        public string _name;        [Required(ErrorMessage="必填选项")]        [StringLength(6,ErrorMessage="用户名不能超过6个字符")]        public string Name         {            get { return _name; }            set            {                Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Name" });                _name = value;                if (PropertyChanged != null)                {                    PropertyChanged(this, new PropertyChangedEventArgs("Name"));                }            }        }        public void NotifyPropertyChanged(String propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }    }}

 这样就限制Name不能为空还有字符长度不能超过6

然后我们在设置xaml里面的属性

1 把命名空间添加进来,因为要用到User.cs

 xmlns:local="clr-namespace:validation2demo"

2 在usercontrol里面写上

 3 再设置textbox和textblock的属性

 4 在xaml.cs里面添加

private void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e)        {            if(e.Action==ValidationErrorEventAction.Added)            {                (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);            }            if (e.Action == ValidationErrorEventAction.Removed)             {                (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);            }        }

 5 执行之前 Ctrl+Alt + E 弹出这样的对话框

查找到System.Exception,把钩钩去掉,再执行程序

 

这样就行了,执行的效果是

 

 

(2)现在我来介绍另外一种验证方法,这种方式适合修改数据的数据验证

 这种方法利用到wcf ria ,首先我们要把数据源添加进程序,让数据源暴露出来,我在前面有说过ria连接数据库的方法,大家可以看前面的

流程:

(1)ria添加数据源

(2)在后台加载实体

代码如下

public partial class MainPage : UserControl    {        DomainService1 ds;        public MainPage()        {            ds = new DomainService1();            InitializeComponent();       ds.Load(ds.GetTestQuery(), Load =>{                   Load.Completed += delegate          {                  LayoutRoot.DataContext = Load.Entities.FirstOrDefault();             };           }, null);

 利用LayoutRoot.DataContext = Load.Entities.FirstOrDefault();

你可以得到数据表里面的第一条数据,

你也可以自己写函数过滤要加载的实体

在前台

 

运行的时候,会有数据自动加载到textbox里面,你修改数据的时候会验证数据

现在我们去写验证数据的代码

在metadata.cs里面,我们修改数据为

public partial class Test    {        // 通过此类可将自定义特性附加到        //Test 类的属性。        //        // 例如,下面的代码将 Xyz 属性标记为        //必需属性并指定有效值的格式:        //    [Required]        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]        //    [StringLength(32)]        //    public string Xyz { get; set; }        internal sealed class TestMetadata        {            // 元数据类不会实例化。            private TestMetadata()            {            }            [Required(ErrorMessage="必填选项")]//不能为空            [StringLength(6,ErrorMessage="密码长度不能超过6")]//密码长度不能超过6                        public string PassWord { get; set; }           [Required(ErrorMessage="必填选项")]//不能为空            public string UserName            {                get;                set;            }        }    }}

 后台

void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e)        {            if (e.Action == ValidationErrorEventAction.Added)            {                (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);            }            if (e.Action == ValidationErrorEventAction.Removed)            {                (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);            }        }

 

这样就可以了。。

 

执行后的效果是

 

转载于:https://www.cnblogs.com/lihaozhou/archive/2012/08/09/2629667.html

你可能感兴趣的文章
su 与 su - 区别
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
【Linux网络编程】使用GDB调试程序
查看>>
feign调用spring clound eureka 注册中心服务
查看>>
ZT:Linux上安装JDK,最准确
查看>>
LimeJS指南3
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>
Hibernate视频学习笔记(8)Lazy策略
查看>>
CSS3 结构性伪类选择器(1)
查看>>
IOS 杂笔-14(被人遗忘的owner)
查看>>
自动测试用工具
查看>>