2011-10-10 19 views
2

有沒有什麼辦法可以使Windows Phone中的VirtualizingStackPanel只清除/重新虛擬化物品,如果它們尚未加載?Make VirtualizingStackPanel不清理已經加載的項目

解釋更多我想要的東西:當我使用沉重的ItemTemplate加載大量物品清單時,我會使用VirtualizingStackPanel來避免堵塞UI並等到所有元素都被拖到屏幕上。

這是很好的,如果你滾動下降好和慢的名單。但問題是當你再次向上滾動查看已經加載一次的項目時。由於VirtualizingStackPanel現在已經清理了這些元素,因此需要再次加載它們。

我想要的是那些已經加載的物品沒有被清理乾淨。

我不知道他們是如何做到這一點,但IMDB應用程序似乎使用這樣的事情對他們前250底部100部電影名單。我還注意到,它們在滾動時不會加載圖像,所以它不會阻塞UI,除非您站在列表中。

任何幫助非常感謝!

+0

你真的問什麼問題?你真正的目標是什麼?如果向下滾動的性能很好,爲什麼你不滿意滾動?還是你真的在問如何推遲項目模板中較重組件的加載,直到短時間內滾動不變爲止?要清楚你真的以後是什麼。 – AnthonyWJones

+0

我覺得自己很清楚:VirtualizingStackPanel需要重新加載已經加載一次的項目,當它們被移出視圖時。這是一件壞事,我不想那樣。我想要的是,已經創建的項目一次不會被卸載,然後在它們第二次進入視圖時再次加載,即我希望它們不被清理。 – greve

回答

2

就像一個警告,我的建議來自WPF背景,不是Silverlight或WP7。但根據我的經驗,他們沒有那麼不同。

首先,我會檢查更改VirtualizationMode是否有幫助。將其設置爲回收可能已經提高了您的性能。

否則,要做到你想做的事情會更具挑戰性。您需要創建自己的VirtualizingPanel,並將其設置爲動態管理創建項目。你可以找到一套好的文章here。但不是清除「再次可見但現在虛擬化的物品」,而是保留它們,以便最終實現所有物品。 我知道它有點含糊,我有代碼在這裏,我用我們的自定義工具欄,如果有必要,我可以發佈一些解釋一種方式如何做到這一點。 (再次不保證它也適用於WP7)。

問候函

+0

這看起來很有趣!即使它是爲WPF的概念是相同的。我會通讀博客文章並將其標記爲接受,如果它工作:) – greve