1

我正在製作wp7中的搜索應用程序。每條記錄的數據都綁定到用​​戶控件。我已經引入了無限加載,而不是給頁碼。因此,當屏幕中UserControl的實例數量增加時,從一頁到另一頁(如預覽或設置頁)或從該頁返回到當前頁的速度會變慢。我無法改變設計(無限加載概念)。由於數據綁定導致的緩慢頁面轉儲

有什麼方法來處理這種情況?如何改變控件的可見性?並參考或建議將不勝感激。

注意我標記WPF和Silverlight,因爲綁定發生在他們的方式相同,預計那些已經處理這些情況。

編輯檢查這個question,這是我問的。由於在列表框中有UserControl,因此不會維護垂直偏移量。所以除了使用ItemsControl和scrollViewer,沒有別的選擇。 ItemsControl包含一個5-6個用戶控件的列表,這些用戶控件內部有itemsControls,我認爲在這種情況下虛擬化可能不會發生。我對嗎?

+2

VirtualizingStackPanel是你的朋友。 – 2012-04-23 15:57:15

回答

2

在WPF中,這是通過虛擬化

使用Virtualization完成,UserControl實際上只有一個副本(或幾份)被創建,並切換到另一個用戶的控制實際上只是交換了DataContext的控制一定會。它實際上並沒有創建一個新的UserControl。例如,如果您的VirtualizingStackPanel包含100,000個項目,並且一次只能顯示10個項目,則它只會呈現約14個項目(滾動緩衝區的額外項目)。滾動時,這14個控件後面的DataContext被更改,但實際控件本身永遠不會被替換。相比之下,一個普通的StackPanel實際上會在被加載時呈現100,000個項目,這會顯着降低應用程序的性能。

這個關於Virtualizing an ItemsControl的問題可能會讓你朝着正確的方向前進。

+0

感謝您的這些信息,我會檢查並回復您。我已經更新了一下我的問題,請檢查在這種情況下是否會發生虛擬化。 – Prakash 2012-04-24 05:16:04

+0

@Prakash ItemsControl並沒有默認虛擬化它的項目,但是我在我的答案中的鏈接將告訴你如何使它虛擬化。 – Rachel 2012-04-24 11:57:06

1

看看this post,我相信Rico提供的解決方案就是您要找的。 :)

+0

我並不完全知道它如何幫助這個案例。 – Prakash 2012-04-25 17:35:36

+0

對不起,我誤解了你的問題,我認爲只有一個「添加更多」按鈕...我可以問爲什麼你需要每個用戶控件一個? – 2012-04-26 00:27:31

+0

每個用戶控件都有不同的類別。用戶有興趣加載更多他想要的東西。 – Prakash 2012-04-26 06:20:29