16

我正在使用以下模板进行验证错误

<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:无法从“(Validation.Errors)”(类型“ReadOnlyObservableCollection`1”)获取“Item []”值(类型“ValidationError”)。BindingExpression:Path=AdornedElement.(0)[0].ErrorContent; DataItem='AdornedElementPlaceholder'(名称='装饰者');目标元素是 'Polygon' (Name=''); 目标属性是“工具提示”(类型“对象”) ArgumentOutOfRangeException:“System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。

我尝试了HasError财产,但失败了。有人有什么想法吗?

4

1 回答 1

30

当没有验证错误时,绑定仍然试图访问 Validation.Errors 返回的 ReadOnlyObservableCollection 中的第一个元素,但是因为它是空的,所以抛出了异常。

绑定系统只是吞下异常,但它仍然烦人且不必要。

而不是像这样绑定:

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

..你可以这样做,以避免异常:

Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent
于 2012-09-21T17:31:47.133 回答