我想在将用户输入的数据绑定到文本框之前检查业务规则?在我将数据绑定到模型之前,我需要确保它满足一定的标准。如果我可以在绑定发生之前执行一个方法,这将非常容易。我有办法做到这一点吗?
问问题
149 次
3 回答
3
您可以实施ValidationRule
:
public class CustomValidationRule : ValidationRule
{
private static bool IsValid(string value)
{
// implement you business rule checking logic here
// if valid
// return true;
// else
// return fase;
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var val = (string)value;
if(IsValid(val))
{
return ValidationResult.ValidResult;
}
else
{
return new ValidationResult(false, "Value is not valid");
}
}
}
并在您的绑定中使用它:
<TextBox>
<TextBox.Text>
<Binding Path="ViewModelProperty" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validation:CustomValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Wherevalidation
是定义的命名空间的 XML 命名空间别名CustomValidationRule
(添加xmlns:validation="clr-namespace:NAMESPACE_NAME_HERE"
到您的 XAML)。
于 2012-07-09T08:41:53.297 回答
1
您可以使用绑定转换器。您将编写的代码将在绑定值推送到 UI之前执行。这实际上是转换器的含义:让您能够在 bindind 机制的中间注入代码(在执行 UI之前或之后)
于 2012-07-09T08:36:41.823 回答
1
您可以让绑定到视图的 ViewModel 实现 IDataErrorInfo。这个接口有一个属性和一个索引器:
public string this[string columnName]
{
//The validation logic goes here
if( columnName == "Property1")
{
//put validation here and return error message if exists
if(this.Property1 == "")
{
return "The field Property1 is required";
}
}
//and so on
}
public string Error
{
return "This object is not valid";
}
在视图的绑定中,将以下内容添加到绑定标记中:
<TextBox Text={Binding Property1, ValidatesOnDataErrors=True} />
并且不要忘记通知您的属性中的属性更改。
希望这会有所帮助。
于 2012-07-09T08:47:07.953 回答