DataGridユーザーが新しいレコードを入力できるようにするために使用しようとしていました。はItemsSourceにバインドされていObservableCollection<MyObject>ます。検証とUIへの通知のためにMyObject実装されます。IDataErrorInfoINotifyPropertyChangedPropertyChanged
質問:
次の問題をどのように乗り越えることができますか?
問題:
編集モードで、長いエラー文字列をセルに入力すると、エラー インジケーター (赤い境界線) が の周りにTextBox表示されますが、セルを離れると、次のようにインジケーターがオーバーランして他の列を覆います。

XAML:
<DataGrid VerticalAlignment="Top" Margin="0,5" CanUserAddRows="True" AutoGenerateColumns="False" ItemsSource="{Binding Pricelist}" >
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Price" Width="60" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Price, Mode=TwoWay}"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="Text" Value="{Binding Price, ValidatesOnDataErrors=True}"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
ノート:
これらはすべて非常に典型的なものであり、簡単なはずですが、私の経験でDataGridは非常に面倒です。以下は、この問題を解決するために私が行った手順です。
この問題
ValidationErrorTemplateのを削除しました。明示的に定義され
ElementStyle、EditingElementStyle個別に設定さMode=TwoWayれElementStyle、別の問題に対応します。現在のセルにエラーがある場合にユーザーが他のセルを編集できるようにするために、
ValidatesOnDataErrors=Trueから削除されました。ElementStyleセルの値が空のセルのエラー インジケーターを表示する場合
MultiDataTriggerに を設定するように定義されています。BorderBrushRedNull
おそらくItemsControl代わりに を使用しますが、 の組み込み機能のいくつかは気に入っていますDataGrid。