У меня есть DataGrid, данные которого обновляются фоновым процессом каждые 15 секунд. Если какие-либо данные изменяются, я хочу запустить анимацию, которая выделяет ячейку с измененным значением желтым цветом, а затем снова становится белым. Я вроде как заработал следующим образом:
Я создал стиль с триггером события для Binding.TargetUpdated
<Style x:Key="ChangedCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="00:00:15"
Storyboard.TargetProperty=
"(DataGridCell.Background).(SolidColorBrush.Color)"
From="Yellow" To="Transparent" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
А затем применил его к столбцам, которые хотел выделить при изменении значения
<DataGridTextColumn Header="Status"
Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}"
CellStyle="{StaticResource ChangedCellStyle}" />
Если значение для изменения поля состояния в базе данных ячейка подсвечивается желтым цветом, как я и хочу. Но есть несколько проблем.
Во-первых, при первоначальной загрузке сетки данных весь столбец выделяется желтым цветом. Это имеет смысл, потому что все значения загружаются в первый раз, поэтому вы ожидаете, что TargetUpdated сработает. Я уверен, что есть способ остановить это, но это относительно второстепенный вопрос.
Настоящая проблема заключается в том, что весь столбец выделяется желтым цветом, если сетка каким-либо образом отсортирована или отфильтрована. Думаю, я не понимаю, почему сортировка может вызвать срабатывание TargetUpdated, поскольку данные не изменились, а только так, как они отображаются.
Итак, мой вопрос: (1) как я могу остановить это поведение при начальной загрузке и сортировке/фильтрации, и (2) на правильном ли я пути, и это вообще хороший способ сделать это? Я должен упомянуть, что это MVVM.