У меня есть сетка данных, связанная с ObservableCollection, и я хотел бы выделить новые строки, когда они добавляются в сетку данных (т. Е. Когда новый объект вставляется в ObservableCollection). Я хотел бы выделить строки, когда они вставляются, сначала изменив цвет фона, но затем со временем цвет снова становится нормальным. Я пробовал разные методы, чтобы заставить его работать, но ничего не работает должным образом.
Метод 1: у меня есть триггер события, который срабатывает при загрузке столбца. Он срабатывает при загрузке элемента, но кажется, что он срабатывает почти случайно и в других старых строках (в тех строках, в которых он уже был запущен один раз, когда строка была новой).
<DataGridHyperlinkColumn x:Name="OrderID" Binding="{Binding OrderNumber}" Header="Order" SortMemberPath="ciOrderId">
<DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Background" Value="Transparent"/>
<EventSetter Event="Hyperlink.Click" Handler="OrderNumber_Click" />
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"
Duration="00:00:03"
From="Red" To="Transparent" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>
Метод 2: Я сделал bool в модели представления, который имеет значение true, когда новый элемент добавляется в ObservableCollection. Затем я проверяю это значение в триггере, и если это правда, я запускаю раскадровку. Я не могу заставить это работать должным образом, хотя, и приложение продолжает выдавать ошибку, когда я запускаю это. Кроме того, я не могу найти способ установить это значение равным false после запуска раскадровки (я не могу использовать событие Completed раскадровки, потому что DataTrigger в стиле).
<DataTrigger Binding="{Binding isNew}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"
Duration="00:00:03"
From="Red" To="{x:Null}" FillBehavior="Stop"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
Метод 3: я попытался установить поле метки времени в модели представления, когда новый элемент добавлен в наблюдаемую коллекцию. Затем в XAML я хочу иметь возможность сравнить эту временную метку с текущим временем, и, если она совпадет, я запусту событие. У меня даже есть другое поле, которое содержит текущее время и автоматически обновляется INotifyPropertyChanged, но я не могу найти способ сравнить метку времени новой строки с полем, содержащим текущее время.
Я чувствую, что должно быть решение этой проблемы, но, проведя разочаровывающий день, пытаясь выяснить это, я надеюсь, что кто-то там сможет пролить немного света.