在单个WPF控件中列出所有Validation.Errors?
我正在尝试找到一种绑定单个控件(例如TextBlock或ListBox)的简单方法,以列出WPF表单上的所有validation错误。 我能找到的大多数源代码示例只是将控件绑定到(Validation.Errors)[0] .ErrorContent,它只显示一个validation错误。
我目前正在使用ValidationRule类,但我愿意使用IDataErrorInfo或构建自定义validation器。 我只是不确定如何实现我期望的常见用例。
如何在WPF表单的一个控件中列出所有validation错误?
我不认为你可以使用(Validation.Errors)绑定做这样的事情。 原因是Validation附加属性提供了绑定控件和assembly器站点之间的一对一关系,因此您无法在一个assembly器中组合来自不同控件的validation错误 – 最后一个将始终“接管”该站点。 顺便说一句,我不知道为什么Validation.Errors是一个数组 – 可能来自同一个控件的多个错误?
但仍有希望 – 您至少有两种方法可以解决这个问题,而无需使用validation装饰器。
第一个是简单的钉子 – 如果你使用IDataErrorInfo,你有一些机制来检查你的对象的绑定值的有效性。 然后你可以写出一些东西
public IEnumerable CombinedErrors { get { if (FirstValError) yield return "First value error"; if (SecondValError) yield return "Second value error"; } }
并将一些ItemsControl绑定到CombinedErrors属性
第二个涉及在每个绑定上设置NotifyOnValidationError = True(以引发Validation.Error路由事件)并在顶部容器上捕获此事件:
public List MyErrors { get; private set; } private void Window_Error(object sender, System.Windows.Controls.ValidationErrorEventArgs e) { if (e.Action == ValidationErrorEventAction.Added) MyErrors.Add(e.Error); else MyErrors.Remove(e.Error); }
那么你可以将它们绑定到任何ItemsControl。
直径,
通过在一些添加的行为的帮助下实现您自己的ValidationRule,可以做到这一点。
我们的想法是在您的代码隐藏/ ViewModel中管理您自己的ValidationResult列表,并将其传递到您希望从中提取错误的TextBox。 再次,使用相同的集合,将其绑定到ListBox或TextBlock以检索错误。
我写了一篇关于如何创建自己的validation错误跟踪器的文章,或者随意下载源代码并按原样使用它。
希望有所帮助。
上述就是C#学习教程:在单个WPF控件中列出所有Validation.Errors?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949789.html