我有一個WPF數據網格,綁定到linq-to-sql從數據庫中填充的列表。的結合是雙向的,從而允許當列表的初始化期間與存儲器外的異常顯示關於20000行,則程序崩潰用戶改變每一行如何懶評估wpf:DataGrid,只根據需要檢索數據
<wpf:DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding MyList}"
SelectedItem="{Binding SelectedItem}" >
中的值。即使行數較少,性能也變得難以忍受。
我知道在初始化時,datagrid遍歷每一行來測量最大列寬和其他屬性。無論是否在屏幕上,它顯然都會這樣做。
我嘗試綁定數據網格到myQuery.ToList()
(允許通過單擊列對數據網格進行排序)或直接綁定到IQueryable。 (排序不適用於此)
兩者都產生相同的結果。單獨使用20000個項目的ToList()不會導致大量內存消耗,只有在綁定到數據網格時纔會發生這種情況。
忽略數據網格中20000行有用的問題(這些是當前需求;改變這些工作示例會有幫助)。
什麼是最簡單的方式來懶惰地加載當前顯示在屏幕上的數據,並忽略其他所有內容,直到它滾動到視圖中?
這可以在沒有第三方庫和主要代碼更改的情況下完成嗎?
如果不是,建議的解決方法是什麼?
你需要DataGrid中? DataGrid是一個豬。 ListView Gridview將一部分資源用作DataGrid。你給DataGrid一個*高度,因爲如果是的話,它不會虛擬化。確保你得到一個垂直滾動條,並去GridView。 – Paparazzi
@Blam不知道如果我需要DataGrid,但根據[這個答案](http://stackoverflow.com/a/4766730/145999)和[這個答案](http://stackoverflow.com/a/1006507/ 145999)Datagrid將是默認選擇,因爲我想編輯和排序。我需要設置什麼樣的身高?我得到一個滾動條。 – HugoRune
使用GridView你需要實現排序,但並不難。 GridView不支持編輯。我所做的是在右側有一個編輯細節,他們可以編輯選定的行。用戶喜歡速度(而不是鎖定)。 – Paparazzi