我试图用来DataGrid让用户输入新记录。ItemsSource绑定ObservableCollection<MyObject>到. 并MyObject实现IDataErrorInfo验证并INotifyPropertyChanged通知PropertyChangedUI。
问题:
我怎样才能克服以下问题?
问题:
在编辑模式下,当我在单元格中输入一个长错误字符串时,它会在 周围显示错误指示器(红色边框)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另一个问题。ElementStyleValidatesOnDataErrors=True如果当前单元格中存在错误,则从中删除ElementStyle以允许用户能够编辑任何其他单元格。如果单元格的值是为空单元格显示错误指示符,则定义
MultiDataTrigger为设置BorderBrush为。RedNull
我可能会改用 a ItemsControl,但我确实喜欢DataGrid.