【发布时间】:2014-07-31 22:47:34
【问题描述】:
我正在尝试异步延迟加载列表框中每个项目的缩略图。
<Image Source="{Binding Path=Thumbnail, TargetNullValue={StaticResource DefaultImage}}"/>
由于 Listbox 是虚拟化的,Thumbnail 属性的 getter 仅在项目位于显示端口或靠近显示端口时才被调用。
public BitmapSource Thumbnail
{
get
{
TriggerLoad();
return _thumbnail;
}
}
我正在等待在 TriggerLoad 函数中加载 Thumbail 的昂贵操作,但 UI 响应速度不是很快,尤其是当您尝试快速滚动浏览大量项目时。
private async void TriggerLoad()
{
if (!LoadTriggered)
{
LoadTriggered = true;
var cacheItem = _cache[key] as CacheItem;
if (cacheItem != null)
await LoadBitmapFromCache(cacheItem); // returns a Task
else
await LoadBitmapFromService(Id); // returns a Task
}
}
发现了一个类似的问题here,但这不是关于将项目加载到列表框。有没有更好的方法来延迟加载您绑定到 Listbox 的部分数据?
编辑:我尝试了 PriorityBinding 和 IsAsync 选项,滚动并不比我当前的解决方案好。
【问题讨论】:
-
由于一种方法并不适合所有方法,所以想知道您是否可以发布应用程序的工作示例?让我们看看我们可以针对您的情况进行哪些优化。
标签: c# wpf xaml asynchronous listbox