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'(Name ='adorner'); ターゲット要素は'Polygon'(Name ='');です。ターゲットプロパティは'ToolTip'(タイプ'Object')です。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 に答える