У меня есть DataGrid с 3 столбцами, 2 из которых - DataGridTextColumns, а последний - DataGridTemplateColumn, который содержит CheckBox. Он привязан к объекту ObservableCollection Field.WPF: Ошибка отображения DataGrid
Пользователь может изменить данные в DataGrid на основе SelectedItem ComboBox, который появляется чуть выше DataGrid. Этот ComboBox привязан к списку объектов RecordType. Я выбрал List, поскольку значения в нем не меняются.
Проблема у меня странная. Иногда, но не всегда (ошибка очень темпераментная), при изменении значения в ComboBox строки на экране DataGrid странно (см. Скриншот) при прокрутке вниз по списку. Некоторые строки в DataGrid отображаются с небольшой серой областью в левой части, а содержимое строки сдвигается вправо, что затрудняет чтение значений ячеек. По мере продолжения прокрутки вверх или вниз, так что другие ячейки отображаются одинаково, хотя проблема только влияет на минимальное количество строк, 5 на макс. Связанные строки не всегда одинаковы и могут меняться при изменении элемента ComboBox.
Чтобы подтвердить, что я скрыл определенные имена полей на скриншоте, чтобы защитить конфиденциальность нашего клиента.
Может ли кто-нибудь предложить, что может вызвать эту проблему? Код XAML, который я использую для ComboBox и DataGrid, приведен ниже.
Любые предложения/комментарии/помощь будут очень признательны.
Большое спасибо!
<ComboBox ItemsSource="{Binding RecordTypes}" SelectedItem="{Binding SelectedRecordType}" DisplayMemberPath="DisplayName" HorizontalAlignment="Left" Margin="9,71,0,0" VerticalAlignment="Top" Width="195"/>
<DataGrid SelectedItem="{Binding SelectedField}" ItemsSource="{Binding Fields}" GridLinesVisibility="None" AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="10,98,0,0" VerticalAlignment="Top" Height="385" Width="400" IsReadOnly="True" CanUserReorderColumns="False" CanUserResizeRows="False" HeadersVisibility="Column" SelectionMode="Single" MaxColumnWidth="300">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="ToolTip" Value="{Binding Description}" />
<Style.Triggers>
<Trigger Property="ToolTip" Value="{x:Static system:String.Empty}">
<Setter Property="ToolTipService.IsEnabled" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding DisplayName}" Header="Field" Width="150" />
<DataGridTextColumn Binding="{Binding DisplayPath}" Header="Path" Width="*" />
<DataGridTemplateColumn MinWidth="25" MaxWidth="25">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="5" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Я думаю, что это связано с вашей подсказкой. что объясняет также, почему это не происходит все время. – thumbmunkeys
Похоже, вы страдаете от [Видимости заголовка строки заголовка WPF DataGrid] (http://stackoverflow.com/questions/8683631/wpf-datagrid-row-header-visibility-error) – elgonzo
Спасибо elgonzo, я думаю, что это решило проблема! Однако левый столбец теперь полностью серый, я предполагаю, потому что я, очевидно, удалил HeadersVisibility = «Column». Если я использую как RowHeaderWidth = 0, так и HeadersVisibility = "Column", проблема все же возникает. Любая идея, как я могу удалить левый столбец, сохраняя RowHeaderWidth = 0? Большое спасибо за вашу помощь! – user3124134