Подтвердить что ты не робот

Шаблон ошибки проверки - обязательное исключение

Я использую следующий шаблон для ошибки проверки:

<ControlTemplate>
    <Border BorderBrush="Red" BorderThickness="1">
        <Grid>
            <Polygon Points="8,8 8,0 0,0"
                     Stroke="Black"
                     StrokeThickness="1"
                     Fill="Red"
                     HorizontalAlignment="Right"
                     VerticalAlignment="Top"
                     ToolTip="{Binding ElementName=adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
            <AdornedElementPlaceholder x:Name="adorner"/>
        </Grid>
    </Border>
</ControlTemplate>

ToolTip работает нормально, но после выхода из текущей записи выбрано следующее исключение:

Ошибка System.Windows.Data: 17: невозможно получить значение "Item []" (тип 'ValidationError') из '(Validation.Errors)' (тип 'ReadOnlyObservableCollection`1'). BindingExpression:. Путь = AdornedElement (0) [0].ErrorContent; DataItem = 'AdornedElementPlaceholder' (Name= 'adorner'); целевой элемент "Полигон" (Name= ''); target - это "ToolTip" (тип "Объект" ) ArgumentOutOfRangeException: 'System.ArgumentOutOfRangeException: Указанный аргумент вышел за пределы допустимых значений.

Я попытался использовать свойство HasError, но не удалось. У кого-нибудь есть идея?

4b9b3361

Ответ 1

При отсутствии ошибок проверки привязка по-прежнему пытается получить доступ к первому элементу ReadOnlyObservableCollection, возвращенному Validation.Errors, но поскольку он пуст, генерируется исключение.

Система привязки просто проглатывает исключение, но ее все еще раздражает и ненужно.

Вместо привязки вот так:

Path=AdornedElement.(Validation.Errors)[0].ErrorContent

.. вы можете сделать это так, чтобы избежать исключения:

Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent