WPF 数据验证实现步骤

来源:互联网 发布:遗传算法 量化投资 编辑:程序博客网 时间:2024/05/12 01:39

 

--- 数据验证

 

1、使用ValidationRule验证  需实现其子类,自定义验证规则,即重写Validate(object value, System.Globalization.CultureInfo cultureInfo)方法

 

2、需验证的控件的UpdateSourceTrigger属性触发Validate方法。需配置Binding类的Source,Path属性,否则无法正常触发。(如果mode:OneWayToSource,可臆造一个属性绑定)。

 

3、使用Validation.ErrorTemplate自定义错误显示。

 

 

示例部分代码:

    <Window.Resources>

        <ControlTemplate x:Key="validationTemplate">

            <DockPanel>

                <TextBlock Foreground="Red" FontSize="20">!</TextBlock>

                <AdornedElementPlaceholder />

            </DockPanel>

        </ControlTemplate>

        <src:AgeDataRule x:Key="MaxAge"/>

 

        <Style x:Key="textStyleTextBox" TargetType="TextBox">

 

            <Style.Triggers>

                <Trigger Property="Validation.HasError" Value="true">

                    <Setter Property="ToolTip"

                            Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>

                </Trigger>

            </Style.Triggers>

        </Style>

    </Window.Resources>

 

  <TextBox Name="Age" Validation.ErrorTemplate="{StaticResource validationTemplate}"  Style="{StaticResource  textStyleTextBox}"  Width="100" Height="20" VerticalAlignment="Center">

 

                <TextBox.Text>

 

                    <Binding   Source="{StaticResource MaxAge}" Path="Val"  UpdateSourceTrigger="PropertyChanged" Mode="TwoWay"  >

 

                        <Binding.ValidationRules>

 

                            <src:AgeDataRule />

 

                        </Binding.ValidationRules>

 

                    </Binding>

 

                </TextBox.Text>

 

            </TextBox>

 

 public class AgeDataRule : ValidationRule

    {

        public string Val { get; set; }//臆造的属性,只是用于绑定,无实际意义

 

        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)

        {

            int age = -1;

 

            if (Int32.TryParse(value.ToString(), out age))

            {

                if (age < 0 || age > 120)

                {

                    return new ValidationResult(false, "年龄需在0至120之间!");

                }

                else

                {

                    return ValidationResult.ValidResult;

                }

            }

            else

            {

                return new ValidationResult(false, "输入的字符串格式不正确!");

            }

        }

    }           

 

原创粉丝点击