.net 错误模板绑定错误wpf
当我运行我的应用程序时,在控制台中出现此错误:.net 错误模板绑定错误wpf,.net,wpf,validation,data-binding,controltemplate,.net,Wpf,Validation,Data Binding,Controltemplate,当我运行我的应用程序时,在控制台中出现此错误: System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'ValidationError') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). BindingExpression:Path=AdornedElement.(0)[0].ErrorContent; DataItem='Adorne
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
我猜出现异常是因为当没有错误时,就没有索引,但是我的错误工具提示的绑定似乎是如何执行的典型示例
下面是我的错误模板的绑定
问题:
<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>
纯粹从内存(因此很可能是错误的)我认为,如果在视觉层次结构中没有实际的装饰层,也可能发生这种情况;您是否有机会自定义窗口模板?显然,我记不起确切的例外情况,但不久前类似的事情发生在我身上。排除这种情况的最简单方法是手动将装饰器层放置在某个位置—您可以查看MSDN上的默认窗口控件模板以了解其使用方式
编辑:事实上,这应该会导致NRE,就像我说的,很可能是错的
苏威。我不知道为什么微软在文档中也不能说清楚。同意你关于返回string.Empty的说法,尽管我使用了Josh Smith著名的MVVM演示应用程序中基于null的部分。我查看了数据绑定代码,null和empty实际上被视为相同的。干杯