1

私の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ありItemsControlValidation.Errorsに包まれているからCollectionViewですか?

4

1 に答える 1

1

興味のある方はどうぞ。エラーが追加または削除されたときにコレクションがイベントを発生させなかったため(トリガー バインディング コンバーターが必要)、コンバーターerrorsToColorは起動されませんでした。 イベントを発生させるには、エラーが追加されるたびに変更されるプロパティにバインドする必要があります。コンバーターには引き続き Errors コレクション自体が必要なので、ここではマルチバインディングを使用しました。Validation.ErrorsPropertyChanged

PropertyChangedCount

            <Border BorderThickness="1">
                <Border.BorderBrush>
                    <MultiBinding Converter="{StaticResource errorsToColor}">
                        <Binding Path="." />
                        <Binding Path=".Count" />
                    </MultiBinding>
                </Border.BorderBrush>
                <AdornedElementPlaceholder Name="adornedElement" />
            </Border>

これで、新しいエラーが追加/削除されるたびにerrorsToColorコンバーター (現在は implements ) が実行されます。IMultiValueConverter

于 2012-10-08T09:19:35.163 に答える