silverlight数据验证

 

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里面写上

<UserControl.Resources>

        <local:User x:Key="UserDataContext" />

    </UserControl.Resources>

 3 再设置textbox和textblock的属性

<Grid x:Name="LayoutRoot" Background="White" BindingValidationError="LayoutRoot_BindingValidationError">

        <StackPanel Orientation="Horizontal">

            <TextBlock Text="用户名:" VerticalAlignment="Center"/>

            <TextBox x:Name="txtUserName" Width="200"  Height="50" DataContext="{Binding Source={StaticResource UserDataContext}}" 
Text="{Binding Path=Name, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}" /> </StackPanel>

 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 弹出这样的对话框

silverlight数据验证

查找到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();

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

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

在前台

<Canvas x:Name="LayoutRoot" Background="White">

        <StackPanel>

        <StackPanel Orientation="Horizontal">

            <TextBlock Canvas.Left="205" Canvas.Top="39" Height="23" Name="textBlock1" Text="用户名" Margin="10"/>

             <TextBox Canvas.Left="54" Canvas.Top="36" Height="23" Name="textBox1" Text="{Binding NotifyOnValidationError=True, Path=UserName, 

            ValidatesOnExceptions=True, Mode=TwoWay, ValidatesOnNotifyDataErrors=True}" Width="120"  />

        </StackPanel>

        <StackPanel Orientation="Horizontal">

            <TextBlock Canvas.Left="205" Canvas.Top="39" Height="23" Name="textBlock2" Text="密   码" Margin="10"/>

            <TextBox Canvas.Left="54" Canvas.Top="36" Height="23" Name="textBox2" Text="{Binding NotifyOnValidationError=True, Path=PassWord, 

            ValidatesOnExceptions=True, Mode=TwoWay, ValidatesOnNotifyDataErrors=True}" Width="120"  />

        </StackPanel>

            <StackPanel Orientation="Horizontal">

                <Button Name="submit_click" Content="修改" Width="50" Height="30" Margin="10" Click="submitt_click"/>

            </StackPanel>

        </StackPanel>

       

        

       

    </Canvas>

 

silverlight数据验证

运行的时候,会有数据自动加载到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);

            }

        }

 

这样就可以了。。

 

执行后的效果是

silverlight数据验证

 

你可能感兴趣的:(silverlight)