如何在没有绑定的项上执行验证代码

本文关键字:执行 验证 代码 绑定 | 更新日期: 2023-09-27 17:58:57

问题:我正在创建处理数据转换的用户控件(通过转换器/验证规则)。这可以100%按需工作,但只有当控件绑定到某个对象时才会触发验证,但情况并非总是如此。

即使控件没有绑定,是否有强制验证的方法?或者,有没有一种方法可以基本上设置一个伪绑定。(解决方案需要在代码中完成,这样最终的结果就是一个拖放用户控件,程序员不需要自定义xaml

提前谢谢你的建议。

编辑:真正有问题的代码是:

Binding TextBinding = BindingOperations.GetBinding(this, TextBox.TextProperty);
TextBinding.ValidationRules.Add(MyValidationRule);

这就是我分配验证规则的方式,但只有当TextBinding不为null时,它才会起作用。因此,我要么需要一个用于TextBox的伪绑定,要么需要另一种方式来添加验证规则。

如何在没有绑定的项上执行验证代码

听起来你想做的是在用户控件上定义一个依赖属性,用户控件中的XAML将绑定到该依赖属性。该绑定将包含你的验证规则。然后,用户控件的使用者会将用户控件上的属性绑定到他们想要的任何内容。

如果没有确切的用例,很难比这更具体,但考虑一下:

CoolUserControl.xaml.cs

public class CoolUserControl : UserControl
{
    public static readonly DependencyProperty CoolProperty = ...;
    public string Cool
    {
        // get / set
    }
}

CoolUserControl.xaml

<UserControl x:Name="root" ...>
    <TextBox>
        <TextBox.Text>
            <Binding Path="Cool" ElementName="root">
                <Binding.ValidationRules>
                    <!-- your rule here -->
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</UserControl>

SomeConsumer.xaml

<local:CoolUserControl Cool="{Binding SomePropertyOnMyViewModel}"/>