验证错误模板 - 绑定异常

时间:2012-09-21 16:10:35

标签: .net wpf xaml exception

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

<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:无法获取&#39;项目[]&#39;值类型   &#39; ValidationError&#39;)来自&#39;(Validation.Errors)&#39; (类型   &#39; ReadOnlyObservableCollection`1&#39)。   BindingExpression:路径= AdornedElement(0)[0] .ErrorContent;   的DataItem =&#39; AdornedElementPlaceholder&#39; (名称=&#39;装饰器&#39);目标要素   是&#39; Polygon&#39; (名称=&#39;&#39);目标属性是工具提示&#39; (键入&#39;对象&#39;)   ArgumentOutOfRangeException:&#39; System.ArgumentOutOfRangeException:   指定的参数超出了有效值的范围。

我尝试使用HasError属性,但失败了。任何人都有任何想法?

1 个答案:

答案 0 :(得分:29)

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

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

而不是像这样绑定:

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

..你可以这样做,以避免例外:

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