保存不验证属性

时间:2015-03-16 14:39:44

标签: c# wpf validation

MyI在我的项目中有奇怪的要求。我必须在绑定到视图的字段上使用验证器,并在setter中使用OnPropertyChange方法。这样做了:

public class MyValidationRule : ValidationRule
{
    private const int MyLength = 17;

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        var valueString = (string)value;
        if (valueString != null && valueString.Length == MyLength)
        {
            return new ValidationResult(true, null);
        }

        return new ValidationResult(false, "Invalid value");
    }
}

和XAML:

< Binding Path="Value" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
    <Binding.ValidationRules>
        <validationRules:MyValidationRule ValidationStep="RawProposedValue" />
    </Binding.ValidationRules>
</Binding>

这项工作正确,但该要求是我必须保存不在db中验证值的事实。验证器应该只做红色背景。

我只想在值未验证时调用此属性的setter

修改

我想用这个验证规则调用我的属性的setter,当它的长度不等于17(MyLength)时。

1 个答案:

答案 0 :(得分:0)

我以不同的方式做到了。我实现了IDataErrorInfo接口并实现其成员:

public string this[string columnName]
    {
        get
        {
            return Validate(columnName);
        }
    }

    public string Error { get; private set; }

    public string Validate(string propertyName)
    {
        string error = null;
        switch (propertyName)
        {
            case "Value":
                if (_value.Length != 17)
                    error = "Invalid value";
                break;
        }

        Error = error;
        return error;
    }

并在绑定中设置标志:

ValidatesOnDataErrors="True" 

现在它按照我想要的方式工作。