Immagini in una listbox (wpf)

martedì 20 gennaio 2009 - 17.52

Renovatio Profilo | Newbie

Salve a tutti.
Premetto che non sono un grande esperto di WPF, quindi perdonatemi se il mio quesito risulterà banale.

Ho una listbox in cui voglio presentare una collezione di album di mp3, mostrando il titolo, l'artista e la cover.
La sorgente ItemsSource è legata alla proprietà Groups di una CollectionView, dove ogni gruppo rappresenta una diverso album. Notate che ItemsSource non è legato ad una collezione dotata di gruppi (il che a quanto ho letto inibisce la virtualizzazione) ma ad una ObservableCollection<CollectionViewGroup>.

Ho circa 1000 album da presentare. A quanto ho capito, la virtualizzatione operata dalla listbox consiste nel presentare solamente gli elementi della collezione che risultano visibili. Quello che quindi mi aspetto è che, siccome in ogni momento (compreso all'inizio) sono visibili solo 6 ListBoxItem, solo 6 immagini vengano caricate (vengano istanziati solo 6 data-template), rimpiazzate quando si scrolla dai dati (cover) dei nuovi album che diventano visibili.

Invece quando eseguo l'applicazione quello che noto è che la memoria occupata è di circa 300 mega, contro i 50 mega occupati in assenza della ListBox che presenta gli album. Questo mi fa pensare che il data-template per gli elementi della listbox venga istanziato per tutti e 1000 gli album.

Quindi per mostrare solamente le cover degli album che, in un dato momento, sono visibili, devo scrivere del codice apposito per il caricamento/scaricamento delle immagini?
C'è qualcosa che sto trascurando?

Il mio data-template è il seguente:

<DataTemplate x:Key="DataTemplate">
<StackPanel
HorizontalAlignment="Left"
Orientation="Horizontal">
<Image
HorizontalAlignment="Left"
Name="image"
Tag="image"
Source="{Binding Path=Items[0].PreviewLocation}"
Stretch="UniformToFill"
Margin="0,0,5,0"/>
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Center"
Width="85">
<TextBlock
Text="{Binding Path=Name}"
Margin="0,0,0,1"
TextTrimming="CharacterEllipsis"/>
<TextBlock
Name="Artist"
Text="{Binding Path=Items[0].Artist}"
FontWeight="Normal"
FontSize="7"
Foreground="#4b4b4b"
TextTrimming="CharacterEllipsis"/>
</StackPanel>
<Path
Style="{StaticResource ListBoxItemArrow}"/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}"
Value="True">
<Setter
TargetName="Artist"
Property="Foreground"
Value="#FFFFFF"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>

Potete aiutarmi?
Grazie infinite!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5