У меня есть сетка данных, привязанная к 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, но я не могу найти способ сравнить метку времени новой строки с полем, содержащим текущее время.
Я чувствую, что должно быть решение этой проблемы, но, проведя разочаровывающий день в попытках понять это, я надеюсь, что кто-то там сможет пролить свет.