是否可以在绑定功能执行之前执行辅助方法?

时间:2012-07-09 08:31:15

标签: c# wpf xaml data-binding

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

3 个答案:

答案 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} />

并且不要忘记通知您房产中的房产已经更改。

希望这有用。