Имеется DataGridPeoples :
<DataGrid x:Name="DataGridPeoples" CanUserDeleteRows="False" Margin="180,10,0,0" Height="718" Width="822" FontSize="15" AutoGenerateColumns="False" ColumnWidth="*" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" CanUserAddRows="False" GridLinesVisibility="All">
<DataGrid.Columns>
<DataGridTextColumn Header="Фамилия" Binding="{Binding Family, UpdateSourceTrigger=PropertyChanged}" CanUserResize="False"/>
<DataGridTextColumn Header="Имя" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" CanUserResize="False"/>
<DataGridTextColumn Header="Отчество" Binding="{Binding Otch, UpdateSourceTrigger=PropertyChanged}" CanUserResize="False"/>
<DataGridTextColumn Header="Номер" Binding="{Binding Number, UpdateSourceTrigger=PropertyChanged}" Width="auto" CanUserResize="False"/>
<DataGridTextColumn Header="Дата рождения" Binding="{Binding BirthDay, UpdateSourceTrigger=PropertyChanged ,StringFormat=d}" Width="auto" CanUserResize="False"/>
<DataGridTextColumn Header="Дата окончания" Binding="{Binding ExpirationDate, UpdateSourceTrigger=PropertyChanged ,StringFormat=d}" Width="auto" CanUserResize="False"/>
</DataGrid.Columns>
</DataGrid>
На котором возникает событие:
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 VirtualizingStackPanel.VirtualizationMode="Standard" />
И изменить события для раскраски фона на DataGrid.LoadingRow
Надеюсь кому-нибудь поможет.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В вопросе Получение данных во ViewModel из делегированного объекта по поводу приведённого ниже кода View с привязками и паттерна MVVM в целом я понял...
Имеется сервер класса TcpListenerОн принимает входящие подключения методом BeginAcceptTcpClient (AsyncCallback, Object)
Нашёл на просторах StackOverflow пример как читать данные из excelНо вылетают ошибки
Когда задан Padding для параграфа, то его формат передается следующей строке, после нажатия EnterИ убрать его получается только вручную