Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存而不是验证属性_C#_Wpf_Validation - Fatal编程技术网

C# 保存而不是验证属性

C# 保存而不是验证属性,c#,wpf,validation,C#,Wpf,Validation,我在我的项目中有奇怪的要求。我必须在绑定到视图并在setter中具有OnPropertyChange方法的字段上使用验证器。这样做: public class MyValidationRule : ValidationRule { private const int MyLength = 17; public override ValidationResult Validate(object value, CultureInfo cultureInfo) {

我在我的项目中有奇怪的要求。我必须在绑定到视图并在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

编辑


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

我使用了不同的方法。我实现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" 

现在它正按照我的要求工作。

虽然我知道英语可能不是你的第一语言,但我还是会尽量编辑你的问题,让它更清楚,因为现在还不是很清楚。我编辑了它。现在,当长度不是17时,setter不会调用。