我试图用来DataGrid
让用户输入新记录。ItemsSource
绑定ObservableCollection<MyObject>
到. 并MyObject
实现IDataErrorInfo
验证并INotifyPropertyChanged
通知PropertyChanged
UI。
问题:
我怎样才能克服以下问题?
问题:
在编辑模式下,当我在单元格中输入一个长错误字符串时,它会在 周围显示错误指示器(红色边框)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
为设置BorderBrush
为。Red
Null
我可能会改用 a ItemsControl
,但我确实喜欢DataGrid
.