【发布时间】:2016-01-07 03:45:38
【问题描述】:
如果已经提出此问题,请提前道歉;我花了一段时间谷歌搜索和搜索堆栈溢出 - 但找不到类似的问题。
我有一个 WPF 窗口,它有很多很多数据输入控件。所有控件都有两种方式绑定到视图模型,并使用 IDataErrorInfo 进行验证。
这里给出了一个绑定示例:
<TextBox >
<TextBox.Text>
<Binding Path="Street" Mode="TwoWay" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
此绑定与所有其他绑定之间的唯一区别是路径。
我的所有绑定都需要验证规则,以及关于何时更新的说明,因为正在进行大量跨字段验证。
我的问题是 - 我是否可以将相同的绑定应用到文本框,而无需对上述示例进行当前的所有复制/粘贴操作?
我在想也许我应该推出我自己的绑定子类来处理它 - 但我不知道这是否是好的做法?
更新: 我刚刚尝试了一个绑定的子类,如下所示:
public class ExceptionValidationBinding : Binding
{
public ExceptionValidationBinding()
{
Mode = BindingMode.TwoWay;
NotifyOnValidationError = true;
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
ValidatesOnDataErrors = true;
ValidationRules.Add(new ExceptionValidationRule());
}
}
这使我的 xaml 看起来像这样:
<TextBox Text="{bindings:ExceptionValidationBinding Path=PostCode}" />
而且它似乎有效......就像我说的那样 - 虽然不知道这种方法是否有任何问题。
【问题讨论】:
-
听起来好像创建一个自定义文本框会起作用。
-
您的方法非常好,您应该遵循它。这个绑定当然不是某种通用类(可以在很多项目中灵活复用),但至少是当前项目特有的。
标签: c# wpf validation data-binding