2013-11-29 77 views
0

我在本地获取一些数据,实际的读取过程非常快。可以说,因此我有几个ms后有一个列表。虚拟化数据访问

当我将某些项目控件(Ex ListBox)绑定到此数据时,数据显示在项目控件上需要一些时间。例如,如果我在List中有100个项目,则在ListBox中显示的项目大约需要10秒。多多益善。

主要问题是数据显示。每个项目都有一个图像路径。所以,当Itemtemplate被执行时,它会将图像缩小到预定义的大小并显示它。因此,图像缩小的CPU时间越多,UI的响应时间就越多。

<DataTemplate x:Key="itemTemplate"> 
    <StackPanel> 
    <Image Width="48" Height="48"> 
     <Image.Source> 
     <BitmapImage DecodePixelWidth="48" UriSource="{Binding ImagePath}" /> 
     </Image.Source> 
    </Image> 
    </StackPanel> 
</DataTemplate> 

为了使UI响应,我使用Rx移动了异步线程上的图像解码,并且工作正常。然而,由于这是一个简单的项目(单个exe),我会尽量避免使用Rx来完成这项任务。那么,如何在没有Rx的情况下做到这一点?

list.ToObservable(Scheduler.Default) 
      .Buffer(5) 
      .ObserveOn(SynchronizationContext.Current) 
      .Subscribe(data => 
       { 
        foreach (var item in data) 
         UIList.Add(item); 

       }, null, null); 
+0

冒着明显的风险,你检查了WPF可视化器,以确保你的ListBox实际上是虚拟化的项目? –

+0

@MarkFeldman我们应该经常在我们的生活中冒一点风险,对吧? :)风格阻碍了虚拟化,所以请用相同的建议写一个答案,以便我能接受它。 :) – Goran

+0

谢谢戈兰。我自己曾多次被这个人咬过,在WPF中打破虚拟化非常容易。 –

回答

0

风险显而易见你检查了WPF可视化器,以确保你的ListBox实际上是虚拟化的项目?