我有一个ItemsControl,它由DataContext上实现INotifyDataErrorInfo的对象验证。预期效果是验证错误显示在TextBlock中的控件下方,而不是传统的红色边框和工具提示样式。
验证后,我的TextBlock出现了,但它的Text是空的——我与验证错误的绑定有问题,但我不知道是什么。
此外,TextBlock与ItemsControl下面的控件重叠,而不是为自己腾出额外的空间。我该如何解决这些问题?
<ItemsControl ...>
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel>
<AdornedElementPlaceholder />
<TextBlock Text="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</ItemsControl>
几天前我遇到了与您的第一个问题相同的问题。当我使用Snoop检查ErrorTemplate
中的控件时,我发现ErrorTemplate中的DataContext已经是ReadOnlyObservableCollection<ValidationError>
类型。因此,您可以只使用<TextBlock Text="{Binding CurrentItem.ErrorContent}" />
,而无需铸造和设置RelativeResource
。