Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 有没有在XAML中应用Binding.ValidationRules的简明方法_Wpf_Xaml_Data Binding - Fatal编程技术网

Wpf 有没有在XAML中应用Binding.ValidationRules的简明方法

Wpf 有没有在XAML中应用Binding.ValidationRules的简明方法,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我正在研究WPF/XAML中一些数据输入表单的验证规则。通过对字段绑定显式应用验证规则,我已经能够获得我想要的用户体验: <Binding Path="qtyoffset" NotifyOnValidationError="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged" > <Binding.

我正在研究WPF/XAML中一些数据输入表单的验证规则。通过对字段绑定显式应用验证规则,我已经能够获得我想要的用户体验:

<Binding 
        Path="qtyoffset"
        NotifyOnValidationError="True"
        ValidatesOnDataErrors="True"
        UpdateSourceTrigger="PropertyChanged"
        >
    <Binding.ValidationRules>
        <utility:DecimalValidationRule precision="1" />
    </Binding.ValidationRules>
</Binding>

根据上述内容,每次按键时都会验证该字段。如果用户输入一个“X”,该字段将立即标记为无效,错误消息将显示在适当的位置,“提交”按钮将立即禁用,等等。一切都很好。如果用户在小数点后输入两位数字,输入两个小数点等,也会发生同样的情况

我唯一的问题是冗长。需要为每个字段提供上面的绑定代码,如果一个字段的绑定代码不正确,那么该字段就不能正常工作。我更愿意只指定绑定路径,并自动添加其余部分。在每个绑定上设置NotifyOnValidationError、VALIDATESONDAERRORS和UpdateSourceTrigger,根据绑定到的类型,设置适用于特定数据类型的验证规则。或者,至少,根据我在XAML中指定的类型

我正在考虑在JQuery中进行验证的方法。我没有静态地列出每个输入元素上的所有验证规则,而是设置了许多类。然后,在加载时,我将使用JQuery的DOM搜索功能查找具有特定类集的每个输入元素,并动态添加适当的验证功能

XAML提供了一种非常好的方法,使用样式和setter为显示元素提供这种简洁的配置。但这对绑定不起作用


有合理的选择吗?

简短的回答:没有,没有

但是,您可以做两件事:

  • 你可以把

        NotifyOnValidationError="True"
        ValidatesOnDataErrors="True"
        UpdateSourceTrigger="PropertyChanged"
    
在资源中,以
StaticResource
的形式访问它们,以排除冗余信息,然后您可以在一个位置更改所有这些属性

  • 您可以根据绑定制作自己的。这将使XAML声明变得更短。您可以像这样使用它:
嗯,


Bab.

对于您的需求来说,这可能有点过分了,但是您可以做的一件事是对WPF UserControl进行子类化,然后在加载UserControl以及应用新绑定时编写一个函数,该函数沿着可视化树查找相关类型的绑定并对其应用验证