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)时。
答案 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"
现在它按照我想要的方式工作。