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);
冒着明顯的風險,你檢查了WPF可視化器,以確保你的ListBox實際上是虛擬化的項目? –
@MarkFeldman我們應該經常在我們的生活中冒一點風險,對吧? :)風格阻礙了虛擬化,所以請用相同的建議寫一個答案,以便我能接受它。 :) – Goran
謝謝戈蘭。我自己曾多次被這個人咬過,在WPF中打破虛擬化非常容易。 –