Как активировать ColorAnimation один раз и правильно, после добавления элемента в привязку ObservableCollection? - PullRequest
0 голосов
/ 14 февраля 2019

Добавление нового элемента в мои ObservableCollection запускает последнюю строку для анимации (новая строка сверху, из-за сортировки), а также прокрутка и изменение размера анимирует все строки, которые ранее не отображались.

Все, что мне нужно, - это анимировать каждую новую строку только один раз после добавления.

Мне кажется, я изо всех сил пытаюсь найти правильный триггер (событие?) И не знаю, как правильно обрабатывать сортировку.Есть предложения?

<UserControl.Resources>
    <CollectionViewSource IsLiveSortingRequested="True" Source="{Binding Incidents}" x:Key="cvs">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="TimeStamp" Direction="Descending"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</UserControl.Resources>

<DockPanel Margin="0">
    <Label DockPanel.Dock ="Top" FontWeight="Black">
        Incidents:
    </Label>
    <Grid DockPanel.Dock ="Bottom">
        <DataGrid Background="{x:Null}"
              ScrollViewer.CanContentScroll="True"
              ScrollViewer.VerticalScrollBarVisibility="Auto"
              ScrollViewer.PanningMode="VerticalOnly"
              ItemsSource="{Binding Source={StaticResource cvs}}"
              AutoGenerateColumns="False" IsReadOnly="True" 
              CanUserSortColumns="True" HeadersVisibility="All" FontSize="12"
              >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Time" Binding="{Binding TimeStamp, StringFormat={}{0:HH:mm:ss}}"></DataGridTextColumn>
                <DataGridTextColumn Header="Name" Binding="{Binding CarName}"></DataGridTextColumn>
                <DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="*"></DataGridTextColumn>
            </DataGrid.Columns>

            <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="Loaded">
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetProperty="(DataGridRow.Background).(SolidColorBrush.Color)" 
                                         Duration="00:00:08" 
                                         From="Red" To="Transparent"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.Resources>
        </DataGrid>
    </Grid>
</DockPanel>

public class Incident
{
    public string CarName { get; set; }

    public DateTime TimeStamp { get; set; }

    public string Message { get; set; }
}

public class IncidentCollection : ObservableCollection<Incident>
{

}
...