1

我试图用来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这样很麻烦。以下是我为解决此问题所做的步骤:

  1. 删除了ValidationErrorTemplate这个问题

  2. 明确定义ElementStyleEditingElementStyle单独设置为Mode=TwoWay另一个问题ElementStyle

  3. ValidatesOnDataErrors=True如果当前单元格中存在错误,则从中删除ElementStyle以允许用户能够编辑任何其他单元格。

  4. 如果单元格的值是为空单元格显示错误指示符,则定义MultiDataTrigger为设置BorderBrush为。RedNull

我可能会改用 a ItemsControl,但我确实喜欢DataGrid.

4

0 回答 0