У меня есть 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.