WPF TreeView Virtualization

Я пытаюсь выяснить эту функцию виртуализации, я не уверен, правильно ли я понимаю это или что происходит, но я ' m с помощью профилировщика памяти ANTS для проверки количества элементов в виртуализированном TreeView, и оно продолжает расти. У меня есть TreeView с 1001 элементом (1 корень, 1000 подпунктов), и я всегда получаю до 1001 TreeViewItems, 1001 ToggleButton и 1001 TextBlocks. Разве виртуализация не должна повторно использовать предметы? Если да, то зачем мне по 1001 штуки? Кроме того, CleanUpVirtualizedItem никогда не срабатывает.

Сообщите мне, если я неправильно понимаю это и есть ли у вас ресурсы о том, как это использовать. Я искал в Интернете, но не нашел ничего полезного.

РЕДАКТИРОВАТЬ:

Даже память, используемая деревом, растет из aporx. От 4 МБ до 12 МБ, когда я раскрываю и прокручиваю все элементы.

Дайте мне знать, спасибо.

Это мой код.

XAML:

<Window x:Class="RadTreeViewExpandedProblem.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <TreeView x:Name="treeView"
                  VirtualizingStackPanel.IsVirtualizing="True"
                  VirtualizingStackPanel.CleanUpVirtualizedItem="TreeView_CleanUpVirtualizedItem">
            <TreeView.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel />
                </ItemsPanelTemplate>
            </TreeView.ItemsPanel>
        </TreeView>
    </Grid>
</Window>

C #:

 public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };

            for (int i = 0; i < 1000; i++)
            {
                TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };

                itemLevel1.Items.Add(new TreeViewItem());

                rootItem.Items.Add(itemLevel1);
            }

            treeView.Items.Add(rootItem);
        }

        private void TreeView_CleanUpVirtualizedItem(object sender, CleanUpVirtualizedItemEventArgs e)
        {

        }
    }
17
задан Carlo 28 December 2010 в 20:49
поделиться