gpt4 book ai didi

c# - 延迟加载 ListView 中的可见项

转载 作者:行者123 更新时间:2023-11-30 12:28:32 25 4
gpt4 key购买 nike

我有一个使用以下代码的 ListView :

<ListView x:Name="Display" ItemsSource="{Binding}" Background="#373737" Margin="0,0,350,0" BorderThickness="0" >
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Width="767" Height="88">
<Border Height="64" Width="64" Margin="12,12,0,12">
<Image Source="{Binding Path=album.albumart}" Stretch="UniformToFill"/>
</Border>
<StackPanel Orientation="Vertical" VerticalAlignment="Top" Margin="0,10,0,0">
<TextBlock Text="{Binding Path=name}"
Margin="10,0,0,0" Width="300" Height="40"
TextTrimming="WordEllipsis" TextWrapping="Wrap" FontSize="16" HorizontalAlignment="Left"/>
<TextBlock Text="{Binding Path=album.name}"
Margin="10,-15,0,0" Width="300" Height="20"
TextTrimming="WordEllipsis" HorizontalAlignment="Left"
FontSize="14" Opacity="0.49"/>
<TextBlock Text="{Binding Path=artistname}"
Margin="10,2,0,0" Width="300"
TextTrimming="WordEllipsis" HorizontalAlignment="Left"
FontSize="12" Opacity="0.49"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

我有大约 400 个带有图像的对象(这需要相当多的内存)

然后显示在每个 ListView 项中。

listview 是否有任何方法告诉项目从我拥有的缓存中加载它们的图像,基于哪些对象在 listview 中可见,而不是一直加载所有图像,如前所述,这需要相当长的时间一点内存。

希望你们明白我在说什么,谢谢。

最佳答案

我在包含 3500 多张高分辨率图片的图片文件夹中尝试了此解决方案。内存使用量在 120MB 时达到峰值,剧烈滚动似乎触发了垃圾收集并将内存减少到大约 50MB。

 <ListBox ItemsSource="{Binding Images}" VirtualizingPanel.IsVirtualizing="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Height="64" Width="64">
<Image.Source>
<BitmapImage
DecodePixelHeight="64"
DecodePixelWidth="64"
UriSource="{Binding Path=., Mode=OneWay,UpdateSourceTrigger=Explicit}"
CreateOptions="DelayCreation"
CacheOption="None" />
</Image.Source>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

View 模型:

public class ViewModel : INotifyPropertyChanged
{
public ICollectionView Images { get; private set; }
public ViewModel()
{
}
public void LoadImages()
{
var folder = @"C:\Users\lrved_000\Pictures";
var photos = System.IO.Directory.EnumerateFiles(folder, "*.jpg",SearchOption.AllDirectories);

Images = CollectionViewSource.GetDefaultView(photos);
RaisePropertyChanged("Images");
}

public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}

关于c# - 延迟加载 ListView 中的可见项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com