2011-02-04 29 views
4

我正在使用WPF/.NET 4,並且當我將VirtualizingStackPanel.VirtualizationMode =「Recycling」屬性添加到我的ListBoxes時,它會導致相同的列表滾動時一遍又一遍地重複項目。例如,假設我有一個包含100個項目的ListBox,並且每次都有10個可見項。當列表框第一次加載時,我會看到項目1 - 10,但是當我開始向下滾動查看剩餘項目11 - 100時,項目1 - 10在我向下滾動時反覆重複,因此我無法查看項目11 - 100.如果我將回收更改回標準,那麼一切工作正常,但滾動非常慢(我的ListItems相當複雜,其中有幾個圖像,文本字段和按鈕)。當回收處於開啓狀態時,滾動速度非常快,但我只能查看項目1 - 10。有什麼錯誤或如何解決它的任何想法?提前致謝。WPF ListBox VirtualizingStackPanel.VirtualizationMode =「回收」導致相同的列表項始終出現

+0

是你的項目databound?綁定是如何完成的?通過ViewModel?另外,這些項目是通過Data/ControlTemplate,ItemContainer還是UserControl創建的? – CodeWarrior 2011-02-04 04:13:39

回答

5

回收模式通過重新使用呈現的ListBoxItems,如其名稱所暗示的那樣工作。當ListBox項不再需要顯示從列表滾動的項目時,ListBox將重新使用它來顯示滾動到視圖中的項目。

要更改ListBoxItem顯示的內容,ListBox只需將其DataContext屬性設置爲新項目。這要求ListBoxItem的內容必須正確響應DataContextChanged事件。如果您僅使用數據綁定來填充控件,則會自動發生。但是,如果您的評論意味着您正在使用一些代碼隱藏來更新屬性,那麼您需要確保您的事件處理代碼正在完成這項工作。