以编程方式更改WPF TextBox中的验证规则

11
我有一个文本输入区,定义方式如下:

...

    <TextBox>
        <TextBox.Text>
            <Binding Path="MyProperty">
                <Binding.ValidationRules>
                    <valid:MyValidator/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

我的问题是根据另一个设置,这里应该插入的内容会有所不同。因此,输入数据的验证行为应该发生改变。

我如何在代码后端更改特定文本框的活动验证规则?


我认为转换器更多地针对于改变(转换)传入的数据?我想完全替换活动验证规则,而不改变用户提供的输入。 - Mizipzor
2个回答

25

使用BindingOperations.GetBinding()方法获取TextBox.Text的Binding对象,然后根据需要操作绑定的ValidationRules集合。

Binding binding = BindingOperations.GetBinding(myTextBox, TextBox.TextProperty);
binding.ValidationRules.Clear();
binding.ValidationRules.Add(myCrazyValidationRule);

这似乎正是我想要的,我会尝试一下并回来接受你的答案。 :) - Mizipzor
3
你能否按照MVVM模式的方式使用XAML来完成这个任务? - RobinAtTech
我喜欢那种幽默的风格,“myCrazyValidationRule”。 - Tarik

2
脑海中最简单的解决方案是为每个要设置的验证规则定义一个文本框。将每个文本框绑定到相应的验证规则。然后,根据外部设置/条件,折叠/隐藏除应用验证规则的文本框之外的所有文本框。请注意保留HTML标签,但不要添加解释。

这是一个很好的解决方案,顺便问一下,你有没有想过在MVVM模式中使用itowlson的答案? - RobinAtTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接