Ber*_*ryl 2 .net data-binding validation wpf 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='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
Run Code Online (Sandbox Code Playgroud)
我不明白的其中一个问题是应用程序行为很好,单元测试也是如此.
我(显然)在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>
Run Code Online (Sandbox Code Playgroud)
根据IDataErrorInfo文档,它默认返回一个空字符串.因此,如果没有错误,您应该返回string.Empty.
从Josh Smith的博客中,您可以使用CurrentItem代替[0]来避免错误.
| 归档时间: |
|
| 查看次数: |
5126 次 |
| 最近记录: |