我有一個列表框,可以潛在地具有大量的與背襯的數據項目。爲了處理數據虛擬化,我通過編寫一個實現與ObservableCollection相同的接口的集合來綁定到WPF的UI虛擬化中,並且可以根據需要創建我們的後備數據。列表框數據虛擬化和多選
這工作正常。當我在列表框中引入多選時,問題就出現了。由於列表框通過對象而不是索引管理選定的項目(SelectedItems),所以選擇所有項目會導致所有的後臺數據被啓動並保存在內存中,從而破壞數據虛擬化...
Is there一種防止發生這種情況的方法,除了重寫ListBox來管理通過索引而不是對象進行選擇?
謝謝!
Eric
這聽起來像你得到了你想要的到底是什麼,因爲你想要的物品按需加載。爲了「全選」你需要加載它們,對吧? TBH,我會覆蓋列表框的CTRL-A(全選),並將其綁定到一個不做任何事情的命令(基本上禁用它)。無論你是否可以通過綁定來完成此操作,或者如果您需要派生列表框的子類,我都不確定。 –
不完全。我只希望實際上可見的項目加載數據,但我希望列表框能夠保持選定的索引列表,即使項目不在屏幕上,以便在可見時選擇該項目。我希望允許用戶使用ctrl-a,我不想阻止他們選擇所有項目。 – esc861
對不起,我沒有訪問代碼發佈權利,但我有類似的情況,我做了什麼是移動到ListView(但我認爲你可以用ListBox做到這一點)單選和使用與CheckBox模板。這樣您就可以在項目級別處理檢查(選擇),而不需要ListBox管理選定項目的集合。我這樣做是爲了更好地控制處理Check事件,但我懷疑它也適用於虛擬化。使用UpdateSourceTrigger = PropertyChanged與LostFocus事件一樣,您可能會遇到ListItem消失的問題。 – Paparazzi