none
关于使用ListBox进行滚动加载的问题 RRS feed

  • 问题

  • 比如图片很多的情况下,如果一次加载全部图片,很耗时,用户体验很不好,能不能当ListBox滚动到的时候才加载图片,相当于预加载,不知道WPF ListBox能否实现,请高手解答......

    2013年1月29日 6:42

答案

  • ListBox的元素宿主默认就是VirtualizingStackPanel。它支持自动计算哪些项被需要并加载这些项。

    你可以做的进一步的优化:

    1、把ListBox的VirtualizingStackPanel.VirtualizationMode附加属性设置为Recycling。

    2、使用异步方法向数据源加入项以防阻塞UI(注意有些操作必须利用Dispatcher回到UI线程操作,不过这通常是轻量的,不会阻塞UI)

    2013年1月30日 0:58
  • gee law说的是对的, 首先你要确定你图片所说的加载慢是网UI上加载慢还是image从数据源加载慢,如果是UI呈现的慢,参考gee law的1,开启虚拟化。

    如果是image要从另一个地方下载,这个过程慢,参考2, 用异步获取数据。

    第一个没有什么sample,就是设置VirtualizingStackPanel.IsVirtualizing属性。

    第二个 我想我可以给你解释明白,不用sample, 就是比如你图片是从网上下载的,这个下载的过程要很久很久,这个时候你会在另一个线程去下载这个图片,当这个图片下载完成了, 你再去更新image绑定的那个属性。

    另外,如果你实在没有办法做上面的事情, 也就是你的Image绑定的属性的get方法必然会特别慢的时候,你可以用IsAsync属性。

    http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年1月30日 6:15
    版主

全部回复

  • ListBox的元素宿主默认就是VirtualizingStackPanel。它支持自动计算哪些项被需要并加载这些项。

    你可以做的进一步的优化:

    1、把ListBox的VirtualizingStackPanel.VirtualizationMode附加属性设置为Recycling。

    2、使用异步方法向数据源加入项以防阻塞UI(注意有些操作必须利用Dispatcher回到UI线程操作,不过这通常是轻量的,不会阻塞UI)

    2013年1月30日 0:58
  • 有没Demo可供参考


    2013年1月30日 1:21
  • gee law说的是对的, 首先你要确定你图片所说的加载慢是网UI上加载慢还是image从数据源加载慢,如果是UI呈现的慢,参考gee law的1,开启虚拟化。

    如果是image要从另一个地方下载,这个过程慢,参考2, 用异步获取数据。

    第一个没有什么sample,就是设置VirtualizingStackPanel.IsVirtualizing属性。

    第二个 我想我可以给你解释明白,不用sample, 就是比如你图片是从网上下载的,这个下载的过程要很久很久,这个时候你会在另一个线程去下载这个图片,当这个图片下载完成了, 你再去更新image绑定的那个属性。

    另外,如果你实在没有办法做上面的事情, 也就是你的Image绑定的属性的get方法必然会特别慢的时候,你可以用IsAsync属性。

    http://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync.aspx


    Sheldon _Xiao
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年1月30日 6:15
    版主