仅在填充

时间:2015-06-22 09:31:52

标签: c# wpf idataerrorinfo

我在验证电话号码时遇到问题。在我们的系统中,我们有两个您可以存储的电话号码。我遇到的问题是这些是可选字段。所以我希望它验证电话号码IF,并且只有在用户试图在那里输入电话号码时。如果不是,它可以留空。

我正在使用Phone属性并设置了MaxLength。我试图将MinLength设置为0,但这不起作用。

    [Phone]
    [MaxLength(24)]
    [MinLength(0)]
    public string PhoneNum1
    {
        get { return phoneNum1; }
        set
        {
            if (phoneNum1 != value)
            {
                phoneNum1 = value;
                RaisePropertyChanged("PhoneNum1");
            }
        }
    }

此外,我们还有一个复选框,如果勾选,用户必须至少添加一个电话号码。我还没有尝试过这个,所以我在技术上并不是要求那个解决方案,但如果有任何解决方案可以考虑到这一点,那就太好了。

这是我正在使用的WPF。我正在使用ValidatesOnDataErrors和NotifyOnValidationError

                    <TextBox Margin="0,10,0,0" Grid.Row="10"  Grid.Column="2" 
                        Text="{Binding PhoneNum1, Mode=TwoWay, ValidatesOnDataErrors=True, 
                    NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/>

1 个答案:

答案 0 :(得分:2)

您可以根据原始OptionalPhoneAttribute

实施PhoneAttribute
 public sealed class OptionalPhoneAttribute : ValidationAttribute
 {        
    public override bool IsValid(object value)
    {
        var phone = new PhoneAttribute();

        //return true when the value is null or empty
        //return original IsValid value only when value is not null or empty 
        return (value == null || string.IsNullOrEmpty(Convert.ToString(value)) || phone.IsValid(value));
    }
}

然后你可以改用这个新属性:

[OptionalPhone]
[MaxLength(24)]
public string PhoneNum1
{
    get { return phoneNum1; }
    set
    {
        if (phoneNum1 != value)
        {
            phoneNum1 = value;
            RaisePropertyChanged("PhoneNum1");
        }
    }
}