WPF DataGrid - выделять новые строки, когда вставлен в datagrid

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

Я чувствую, что должно быть решение этой проблемы, но, проведя разочаровывающий день в попытках понять это, я надеюсь, что кто-то там сможет пролить свет.

6
задан JPProgrammer 8 December 2011 в 01:20
поделиться