单个绑定有多个验证规则

Que*_*der 1 c# validation wpf

可以在单个绑定上使用多个验证规则吗?我正在尝试TextBox仅使用XAML 进行验证,BindingGroup但似乎无法正常工作。

这是我的XAML:

<TextBox>
    <TextBox.Text>
        <Binding Path="Title" UpdateSourceTrigger="PropertyChanged"/>
    </TextBox.Text>
    <TextBox.BindingGroup>
        <BindingGroup NotifyOnValidationError="True">
            <BindingGroup.ValidationRules>
                <rule:CantBeEmpty ValidatesOnTargetUpdated="True" />
                <rule:CantBeMoreThanXCharacters
                    CharacterLimit="30"
                    ValidatesOnTargetUpdated="True" />
            <BindingGroup.ValidationRules/>
        </BindingGroup>
    </TextBox.BindingGroup>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

rule命名空间引用xmlns:rule="clr-namespace:MyApp.Views.ValidationRules" 这些规则遵循标准的语法:

public class CantBeEmpty : ValidationRule {
    public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
        [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

mm8*_*mm8 5

您是否尝试将验证规则添加到绑定中?:

<TextBox>
    <TextBox.Text>
        <Binding Path="Title" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <rule:CantBeEmpty ValidatesOnTargetUpdated="True" />
                <rule:CantBeMoreThanXCharacters CharacterLimit="30" ValidatesOnTargetUpdated="True" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案。我的问题源于对BindingGroup的误解。在MSDN中:_A BindingGroup在多个绑定之间创建了一个关系,可以一起进行验证和更新。_在这种情况下,由于只需要验证一个字段,实际上并不需要`BindingGroup`。一个“ BindingGroup”将很有用,需要一起验证多个字段-地址,邮政编码和状态,两个密码字段等。 (2认同)