1

我想在将用户输入的数据绑定到文本框之前检查业务规则?在我将数据绑定到模型之前,我需要确保它满足一定的标准。如果我可以在绑定发生之前执行一个方法,这将非常容易。我有办法做到这一点吗?

4

3 回答 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 回答