C# 错位数据网格错误指示器
我试图使用DataGrid让用户能够输入新记录。 ItemsSource绑定到ObservableCollection。 MyObject实现了IDataErrorInfo进行验证,并对INotifyPropertyChanged进行了更改,以向UI通知PropertyChanged 问题: 我怎样才能克服以下问题 问题: 在编辑模式下,当我在单元格中键入一个长错误字符串时,文本框周围将显示错误指示器红色边框,但离开单元格时,指示器将溢出以覆盖其他列,如下所示: XAML: 注: 我认为所有这些都是非常典型的,应该是直截了当的,但我的经验是DataGrid非常麻烦。以下是我解决此问题的步骤: 已删除的ValidationErrorTemplate 分别显式定义ElementStyle和EditingElementStyle,并在的ElementStyle中设置Mode=TwoWay 已从ElementStyle中删除ValidateSondaerRors=True,以允许用户在当前单元格中出现错误时编辑任何其他单元格 定义了MultiDataTrigger,用于在单元格值为Null时将BorderBrush设置为红色,以显示空单元格的错误指示器C# 错位数据网格错误指示器,c#,.net,wpf,wpfdatagrid,C#,.net,Wpf,Wpfdatagrid,我试图使用DataGrid让用户能够输入新记录。 ItemsSource绑定到ObservableCollection。 MyObject实现了IDataErrorInfo进行验证,并对INotifyPropertyChanged进行了更改,以向UI通知PropertyChanged 问题: 我怎样才能克服以下问题 问题: 在编辑模式下,当我在单元格中键入一个长错误字符串时,文本框周围将显示错误指示器红色边框,但离开单元格时,指示器将溢出以覆盖其他列,如下所示: XAML: 注: 我认为所有这些
我可能会改用ItemsControl,但我确实喜欢DataGrid的一些内置功能 看起来这是一个rant+5类问题。您已经直接问了其中一个问题。请将此问题分解为单独的问题,每个问题都有代码示例。@RQDQ,谢谢,但我的问题是关于为什么DataGrid在一般情况下会有如此大的问题。对于我指出的每一个问题,我都有解决方案。@Bolu验证是我唯一不喜欢WPF的东西。算了吧,它只会让你头痛。就我个人而言,我已经基于ViewModel级别的附加属性和验证创建了自己的验证框架,而不是在绑定级别,它工作得非常好,没有您在这里描述的任何问题。@HighCore,我也在ViewModel级别进行验证,但仍然在视图中使用默认的ValidatingTemplate,我想这些头痛的根源是什么?@Bolu整个事情一团糟。它迫使您的{Binding}使用更加详细的语法,这不必要地污染了您的XAML。我宁愿使用一个附加属性来修改CellTemplate或类似的东西的视觉外观,并将绑定保持为{Binding MyProperty}的默认语法。
<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>