【发布时间】:2011-07-12 21:57:35
【问题描述】:
当我运行我的应用程序时,我在控制台中收到此错误:
System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). BindingExpression:Path=AdornedElement.(0)[0].ErrorContent; DataItem='AdornedElementPlaceholder' (Name='placeholder'); target element is 'TextBlock' (Name=''); target property is 'ToolTip' (type 'Object') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: index'
A first chance exception of type 'NHibernate.Validator.Exceptions.ValidatorConfigurationException' occurred in NHibernate.Validator.dll
我不明白的一点是应用程序的行为很好,单元测试也很好。
我(显然)在 IDataErrorInfo 实现的幕后使用 NHibernate 验证器,但底线是 IDataErrorInfo.Error 和 IDataErrorInfo[columnName] 如果有错误将返回单个字符串,如果有则返回 null不是。
我猜会出现异常,因为当没有错误时,没有索引,但我的错误工具提示的绑定似乎是如何做到这一点的典型示例。
我的错误模板的绑定如下。
问题:
- 如果没有发现错误,IDataErrorInfo[columnName] 不应该返回 null 吗?
- 是否缺少我的错误模板? validation.HasError 部分??
- 这甚至是个问题吗?
- 如果是问题,很可能与NHib验证器有关,有什么建议吗?
带有错误模板的文本框样式:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,16,0" />
<!-- Error display -->
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<TextBlock DockPanel.Dock="Right" Text=" *"
Foreground="Red"
FontWeight="Bold" FontSize="16"
ToolTip="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="placeholder"></AdornedElementPlaceholder>
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="LightYellow"/>
</Trigger>
</Style.Triggers>
</Style>
【问题讨论】:
标签: .net wpf validation data-binding controltemplate