wpf - 是否有在 XAML 中应用 Binding.ValidationRules 的简洁方法

标签 wpf xaml data-binding

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

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

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

我唯一的问题是冗长。上面的绑定(bind)代码需要为每个字段提供,如果在某个字段上不太正确,则该字段将无法正常工作。我宁愿只指定绑定(bind)路径,并自动添加其余部分。在每个绑定(bind)上设置 NotifyOnValidationError、ValidatesOnDataErrors 和 UpdateSourceTrigger,根据绑定(bind)的类型设置适合特定数据类型的验证规则。或者,至少根据我在 XAML 中指定的类型。

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

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

有合理的替代方案吗?

最佳答案

简短回答:不,不是。

但是你可以做两件事:

  • 你可以放

        NotifyOnValidationError="True"
        ValidatesOnDataErrors="True"
        UpdateSourceTrigger="PropertyChanged"
    

在资源中并以 StaticResource 的形式访问它们,剔除冗余信息,然后您可以在一处更改所有这些属性。

  • 您可以自己制作markup extension基于绑定(bind)。这将使 XAML 声明变得更短。你可以这样使用它:<TextBox Text={local:DecimalBinding Path=qtyoffset} />

HTH,

巴巴。

关于wpf - 是否有在 XAML 中应用 Binding.ValidationRules 的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144191/

相关文章:

c# - C++ AMP计算与WPF渲染显卡双用性能

c# - 在 Window 的代码后面实现 IValueConverter

c# - DataTrigger 当大于一个数

带有集合对象的 WPF 数据绑定(bind)

WPF 数据绑定(bind) CheckBox.IsChecked

apache-flex - 弹性 : Help me understand data Binding on getters and setters

c# - 文本框中仅允许字母数字

c# - uwp 标题栏中的后退按钮不可见

c# - .Xaml 不呈现代码中写入的 unicode?

wpf - 在WPF 4.5中是否已确定放弃空域支持?