【问题标题】:Validation error template - binding exception验证错误模板 - 绑定异常
【发布时间】:2012-09-14 02:12:31
【问题描述】:

我正在为验证错误使用以下模板:

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

我尝试使用HasError 属性,但失败了。有人知道吗?

【问题讨论】:

标签: .net wpf xaml exception


【解决方案1】:

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

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

而不是像这样绑定:

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

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

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

【讨论】:

  • 谢谢,不知道 CurrentItem,我的错误是没有检查。
  • 感谢您的解决方案。可悲的是,几乎所有教程都使用Path=AdornedElement.(Validation.Errors)[0].ErrorContent。但是CurrentItem 出现了一个新问题:ReSharper 无法解析“CurrentItem”。你对此也有一些提示吗?
  • @BernhardHiller 你可以这样添加前缀:Path=AdornedElement.(Validation.Errors).(componentModel:ICollectionView.CurrentItem).(ValidationError.ErrorContent).(validation:CustomErrorType.Message) 注意最后一部分'CustomErrorType'是我的自定义类——你的会有所不同。
  • @JonBarker 这不起作用(对我来说)。我得到Cannot get 'CurrentItem' value (type 'Object') from '(Validation.Errors)' (type 'ReadOnlyObservableCollection1')。`虽然做.CurrentItem确实有效。我不确定投射未完成时后台会发生什么。
  • 如果您有错误报告,请参阅stackoverflow.com/a/47556421/73749
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2014-08-08
  • 2016-12-03
  • 2018-06-03
  • 2016-07-11
  • 2011-12-15
  • 2011-07-12
相关资源
最近更新 更多