私のWPFアプリケーション(.Net 4.5)では、検証結果に関する拡張された視覚的なフィードバックをUIに提供したいと思います。データレイヤーの検証エンジンは、INotifyDataErrorInfoインターフェイスを介して警告とエラーを返します。
エラーの種類とエラーメッセージのリストに応じて、赤またはオレンジの境界線を表示する次のXAMLがあります。errorToColor
これは、コレクションに少なくとも1つのエラーがある場合は赤いブラシを返し、Validation.Errors
警告しかない場合はオレンジ色のブラシを返す値コンバーターのリソースキーです。
<TextBox Name="MappingName" Text="{Binding Path=Mapping.Name, NotifyOnValidationError=True}" >
<Validation.ErrorTemplate>
<ControlTemplate>
<DockPanel>
<Border BorderBrush="{Binding Converter={StaticResource errorsToColor}}" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
<ListView DisplayMemberPath="ErrorContent" ItemsSource="{Binding}" />
</DockPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
次に、TextBoxに「無効な」テキストを入力するとどうなるか見てみましょう。
- 'Text1'と入力し、フォーカスを変更しました。
デバッガーがコンバーターと両方のバリデーターにステップインし、ListViewに2つの項目(1つのエラーと1つの警告)と赤い境界線が表示されました。[わかった] - エラーを修正するために「テキスト」と入力し、フォーカスを変更しました。
バリューコンバーターもヒットしませんでした!もちろん、同じ赤い境界線。ただし、ListViewが変更され、警告が1つだけ表示されます。
誰かが何が起こっているのか説明できますか?ListViewがコレクション変更通知を受信し、Borderが受信しないのはなぜですか?でListView
ありItemsControl
、Validation.Errors
に包まれているからCollectionView
ですか?