Я получаю эту ошибку в консоли при запуске моего приложения:
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
Одна из вещей, о которой я пока не понимаю, это то, что поведение приложения в порядке, как и модульtests.
Я (очевидно) использую валидатор NHibernate за кулисами реализации IDataErrorInfo, но суть в том, что и IDataErrorInfo.Error, и IDataErrorInfo [columnName] вернут одну строку в случае ошибкии null, если его нет.
Я бы предположил, что возникает исключение, потому что когда нет ошибки, нет индекса, но привязка для моей подсказки об ошибке кажется типичной для примеров того, как это сделать..
Ниже приведена привязка для моего шаблона ошибки.
Вопросы:
- не должен ли IDataErrorInfo [columnName] возвращать ноль, если ошибки не найдены?
- отсутствует ли мой шаблон ошибки?часть 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>