Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

Проблема с фоном строк в Datagrid WPF

Имеется DataGridPeoples :

На котором возникает событие:
DataGridPeoples.Loaded += DataGridPeoples_Loaded;
Или
DataGridPeoples.LayoutUpdated
Следующего содержания:
private void DataGridPeoples_Loaded(object sender, EventArgs e) { foreach (People item in DataGridPeoples.ItemsSource) { var row = DataGridPeoples.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow; if (row != null && item.ExpirationDate.AddMonths(-1) <= DateTime.Now) { row.Background = Brushes.Crimson; } } }
Проблема заключается в следующем, при прокрутке формы цвет фона строк применяется к тем строкам к которым не должен применяться, насколько я понял проблема связана с виртуализацией, если сделать на Datagrid:
EnableRowVirtualization="False"
То все работает правильно, но работает очень медленно такой вариант меня не устраивает. Как можно реализовать окраску фона строк и виртуализацию в одном виде?


Ответ

В общем проблема решена в англоязычной ветке по следующей ссылке: https://stackoverflow.com/questions/17133286/rowvirtualization-cause-incorrect-background-color-for-rows. по умолчанию в Datagrid VirtualizationMode установлен как Recycling. Для решения этой проблемы рекомендуется установить VirtualizationMode в Standard

И изменить события для раскраски фона на DataGrid.LoadingRow
Надеюсь кому-нибудь поможет.

Комментариев нет:

Отправить комментарий