zoukankan      html  css  js  c++  java
  • WPF 验证表单方法2

    示例来自How to disable a Button on TextBox ValidationErrors in WPF
    效果如图

    继承ValidationRule实现验证类

    public class OverThirteenValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value != null)
            {
                int age = 0;
                try
                {
                    age = Convert.ToInt32(value);
                }
                catch
                {
                    return new ValidationResult(false, "You must be older than 13!");
                }
    
                if (age > 13)
                    return ValidationResult.ValidResult;
    
            }
            return new ValidationResult(false, "You must be older than 13!");
        }
    }
    

    通过MultiDataTrigger绑定提交按钮的IsEnabled属性

    通过Path获得每个输入框的Validation.HasError值,当所有TextBox的HasError=false时,设置提交按钮可用

    <Button Content="Submit" Name="buttonSubmit">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="IsEnabled" Value="false" />
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=TextBoxFirstName, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxLastName, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxAge, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxPhone, Path=(Validation.HasError)}" Value="false" />
                        </MultiDataTrigger.Conditions>
                        <Setter Property="IsEnabled" Value="true" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
    

    显示提示信息

    同样通过Validation.Errors的值判断是否显示提示信息,这里用了一个Converter(ToVisibility),判断错误信息个数是否为0,为0则不显示,不为0则显示
    显示内容为(Validation.Errors)[0].ErrorContent,即第一个错误内容,即如果有多个验证、有多个报错内容也只显示第一个

    <TextBlock Visibility="{Binding ElementName=TextBoxAge, Path=(Validation.Errors), Converter={StaticResource ToVisibility}}">>
        <TextBlock.Text>
            <MultiBinding StringFormat="Age - {0}">
                <Binding ElementName="TextBoxAge" Path="(Validation.Errors)[0].ErrorContent"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    

    示例代码

    ValidationRule 类

    参考资料

    How to: Implement Binding Validation
    How to disable a Button on TextBox ValidationErrors in WPF
    Accessing WPF control validation rules from code

  • 相关阅读:
    GTP (GPRS隧道协议(GPRSTunnellingProtocol))
    dns (域名系统)
    WSP (无线会话协议)
    http 超文本传输协议
    SSN 社会安全号码
    MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
    dns
    C/C++中的预编译指令
    strstr 函数用法
    转Hibernate Annotation mappedBy注解理解
  • 原文地址:https://www.cnblogs.com/Lulus/p/13786297.html
Copyright © 2011-2022 走看看