Sto cercando di capire questa funzione di virtualizzazione, non sono sicuro se sto capendo male o cosa sta succedendo, ma sto usando il profiler di memoria ANTS per controllare il numero di elementi in un TreeView virtualizzato, e continua ad aumentare. Ho un TreeView con 1,001 elementi (1 radice, 1000 voci secondarie) e ottengo sempre fino a 1,001 TreeViewItems, 1,001 ToggleButtons e 1,001 TextBlocks. La virtualizzazione non dovrebbe riutilizzare gli articoli? Se è così, perché dovrei avere 1,001 di ciascuno? Inoltre, CleanUpVirtualizedItem non si attiva mai.WPF TreeView Virtualization
Fammi sapere se sto capendo questo errore e se hai delle risorse su come usarlo. Ho cercato su internet ma non ho trovato nulla di utile.
EDIT:
Anche la memoria utilizzata dal albero cresce da aporx. 4mb a 12mb quando espongo e scorro tutti gli elementi.
Fammi sapere grazie.
Questo è il mio codice.
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)
{
}
}
Questo non dovrebbe essere un ostacolo troppo grande, basta usare una ObservableCollection per associare la vista ad albero e aggiungere i tuoi elementi alla raccolta quando necessario - questo è il più idiomatico Modo WPF comunque, non si desidera aggiungere manualmente gli oggetti direttamente. – BrokenGlass
Mi piace la tua idea. Il modo in cui saprò quando ho bisogno di più elementi è quando scorri verso l'alto o verso il basso sull'albero. Pensi che funzionerebbe con questo approccio? – Carlo
@Calro: certo, dovrebbe funzionare – Liero