C# 保存而不是验证属性
我在我的项目中有奇怪的要求。我必须在绑定到视图并在setter中具有OnPropertyChange方法的字段上使用验证器。这样做: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) {
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不会调用。