WPF TreeView-Virtualisierung

Ich versuche herauszufinden, das Virtualisierung-feature, ich bin mir nicht sicher, ob ich es bin, verstehen es falsch, oder was Los ist, aber ich bin mit der ANTS memory profiler, um zu überprüfen, dass die Anzahl der Elemente in einer virtualisierten TreeView, und es wird einfach immer größer. Ich habe ein TreeView mit 1,001 Elemente (1, root, 1000 sub-Elemente), und ich bekomme immer bis zu 1,001 TreeViewItems, 1,001 ToggleButtons und 1,001 TextBlocks. Ist das nicht die Virtualisierung soll die Wiederverwendung der Elemente? Wenn ja, warum hätte ich 1,001 jeder? Auch die CleanUpVirtualizedItem nie ausgelöst.

Lassen Sie mich wissen, wenn ich dieses Verständnis falsch und wenn Sie die Ressourcen auf, wie Sie diese nutzen. Ich habe gesucht über das internet, aber habe nicht gefunden was nützlich ist.

EDIT:

Sogar den Speicher verwendet, durch die der Baum wächst aus aporx. 4mb, 12mb, wenn ich erweitern und scrollen durch alle Elemente.

Lassen Sie mich wissen, danke.

Dies ist mein code.

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)
        {

        }
    }

InformationsquelleAutor Carlo | 2010-12-28

Schreibe einen Kommentar