C# 仅在填充字段时验证该字段

C# 仅在填充字段时验证该字段,c#,wpf,idataerrorinfo,C#,Wpf,Idataerrorinfo,我在验证电话号码时遇到问题。在我们的系统中,您可以存储两个电话号码。我遇到的问题是,这些是可选字段。因此,我希望它验证电话号码,当且仅当用户试图在其中输入电话号码时。如果没有,则可以保留为空白 我正在使用Phone属性并设置了MaxLength。我已尝试将MinLength设置为0,但不起作用 [Phone] [MaxLength(24)] [MinLength(0)] public string PhoneNum1 { get { ret

我在验证电话号码时遇到问题。在我们的系统中,您可以存储两个电话号码。我遇到的问题是,这些是可选字段。因此,我希望它验证电话号码,当且仅当用户试图在其中输入电话号码时。如果没有,则可以保留为空白

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

    [Phone]
    [MaxLength(24)]
    [MinLength(0)]
    public string PhoneNum1
    {
        get { return phoneNum1; }
        set
        {
            if (phoneNum1 != value)
            {
                phoneNum1 = value;
                RaisePropertyChanged("PhoneNum1");
            }
        }
    }
此外,我们有一个复选框,如果勾选该复选框,用户将必须添加至少一个电话号码。我还没有尝试过这一点,所以从技术上讲,我并不要求这个解决方案,但如果有任何解决方案能够将这一点铭记在心,那将是非常棒的

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

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

您可以基于原始的
电话属性
实现您的
可选电话属性

 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");
        }
    }
}

当您验证特定电话文本字段时,单击按钮?@Joseph我添加了我们正在使用的WPF。我们正在WPF中使用ValidateSondaerRor和NotifyOnValidationError属性。对不起,我完全忘了为任何想知道我问题第二部分的人添加WPF。我通过在ViewModel上使用CustomValidation属性实现了这一点,该属性允许我在选中复选框时验证是否存在数字。谢谢你的帮助,这是一个非常好的解决方案