Wpf 为什么这个验证示例中的数据绑定可以工作?

Wpf 为什么这个验证示例中的数据绑定可以工作?,wpf,validation,data-binding,Wpf,Validation,Data Binding,我想知道XAML示例()到底是如何工作的: 问题: (Validation.Errors)[0].ErrorContent-WPF是否以某种方式检查此代码?因为Validation.Errors可能是一个空集合,在普通C代码中,此代码可能会引发异常。如果此数据绑定为有效输入返回null,则null值将转换为空字符串(例如,在文本控件中) 索引0对应于第一条错误消息。如何从Validate方法返回更多错误消息 感谢您的回复 在这种情况下,只有当Validation.HasError为tru

我想知道XAML示例()到底是如何工作的:


问题:

  • (Validation.Errors)[0].ErrorContent-WPF是否以某种方式检查此代码?因为Validation.Errors可能是一个空集合,在普通C代码中,此代码可能会引发异常。如果此数据绑定为有效输入返回null,则null值将转换为空字符串(例如,在文本控件中)
  • 索引0对应于第一条错误消息。如何从Validate方法返回更多错误消息

感谢您的回复

在这种情况下,只有当
Validation.HasError
为true(基于触发器)时,绑定才处于活动状态。因此,在您的集合中始终至少会有一个错误


如果希望显示的错误多于第一个错误,可以在工具提示中放置一个控件,该控件允许您绑定到整个集合,例如ListView。这将使您将ListView的ItemsSource绑定到
验证.错误的集合,而不是仅尝试访问第一个。

哦,您是对的。我被我正在读的那本书弄糊涂了(这是一个非常相似的片段),书中缺少了“Validation.HasErrors”的部分,它确实抛出了一个异常,尽管作者声明它不应该出现。但是我如何通过Validate方法的返回值发送更多的错误呢?@MartyIX:这确实是一个单独的问题,但这取决于您如何处理验证。如果你想验证自己,看看IDataErrorInfo——你可以用这种方式进行验证,再加上“标准”验证。实际上我没有自己的验证——我从WPF开始,这是我书中的一个示例。我只是好奇。谢谢你的回答。有没有写题目的惯例?技术的名称似乎是多余的,因为人们不断地从我的问题中删除它。为什么?我认为当“WPF”出现在问题中时,问题就更清楚了。在大多数情况下,标签会处理这个问题——所以你也不需要在标题中包含它。@Reed Copsey:我知道这些标签,但我不确定谷歌是否也知道它们,因此我的问题是否会出现在结果中。
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
    <Setter Property="ToolTip"
    Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                    Path=(Validation.Errors)[0].ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
 </Style>