Должны ли события PrepareContainerForItemOverride или OnLoadingRow срабатывать, если VirtualizationMode = Recycling? - PullRequest
0 голосов
/ 18 января 2012

У меня проблемы с производительностью сетки данных, которую я строю динамически. У меня 8 замороженных столбцов, а остальные создаются динамически.

Для тестирования я использую ~ 1000 строк и 100 столбцов. Я не использую виртуализацию данных, потому что весь сбор данных составляет примерно 25 МБ. Однако у меня проблемы с производительностью при прокрутке. Я знаю, что это очень распространенная проблема, и я прочитал несколько полезных ресурсов, включая статью « Оптимизация производительности приложений WPF » на веб-сайте MSDN и другое решение, представленное здесь на StackOverflow.

Кроме того, родительским контейнером сетки данных является Grid, а не StackPanel (я читал, что сетка данных будет отображать все строки, даже если они не видны).

XAML для моей таблицы данных это:

<cg:ColouredDataGrid Grid.Column="0"
        x:Name="usagesDataGrid"
        AutoGenerateColumns="False"
        SelectionUnit="Cell"
        ItemsSource="{Binding Records}"
        Block.TextAlignment="Center"
        VirtualizingStackPanel.IsVirtualizing="true"
        VirtualizingStackPanel.VirtualizationMode="Recycling"
        ScrollViewer.IsDeferredScrollingEnabled="True" DataContext="{Binding}"
        ScrollViewer.CanContentScroll="True"
        EnableColumnVirtualization="False" .../>

ColouredDataGrid - это пользовательский класс, который я создал, в котором я переопределил метод PrepareContainerForItemOverride, чтобы я мог условно применить пользовательскую раскраску к строкам.

Проблема в том, что при отладке при каждой прокрутке метод PrepareContainerForItemOverride запускается для каждой новой строки, которая становится видимой. Разве он не должен срабатывать, поскольку VirtualizationMode установлен на Recycling? Разве он не должен повторно использовать контейнеры, уже созданные для этих предметов?

Может кто-нибудь объяснить мне, что я делаю не так?

Большое спасибо.

...