2013-11-29 127 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實際上是虛擬化的項目?