我想在将用户输入的数据绑定到文本框之前检查业务规则吗?在将数据绑定到模型之前,我需要确保它符合某个标准。如果我可以在绑定发生之前执行一个方法,这将很容易做到。我有办法做到这一点吗?
答案 0 :(得分: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>
其中validation
是名称空间的XML名称空间别名,其中CustomValidationRule
已定义(将xmlns:validation="clr-namespace:NAMESPACE_NAME_HERE"
添加到您的XAML中)。
答案 1 :(得分:1)
您可以使用Binding Converter。您将编写的代码将执行,然后在UI上推送绑定值。这实际上是转换器的含义:使您能够在bindind机制中注入代码(在之前或 与UI绑定后)执行)
答案 2 :(得分: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} />
并且不要忘记通知您房产中的房产已经更改。
希望这有用。