我正在使用DataGrid
和CellEditingTemplates
。由於ItemsSource
使用了數據虛擬化集合(AlphaChiTech解決方案),該集合一次只能按需獲取大小爲100的頁面。WPF - VirtualizingStackPanel在DataGrid中進入編輯模式時請求所有項目
它很好用,直到單元格被雙擊到編輯表單中,然後VirtualizingStackPanel
一個接一個地請求所有項目。當然,作爲一種副作用,最終要求所有頁面。
有沒有辦法解決這個問題?
編輯:
我找到了一個解決辦法,這可能會幫助人們在我的情況:
最後,我觀察到VirtualizingStackPanel沒有要求的情況下的所有項目,該行高度保持不變切換到編輯表單後。在解決方法之前,我的編輯表單略高一些。
現在我以這樣一種方式設置單元格中的控件的MinHeight(正常和編輯),切換到編輯窗體的高度不會改變。
不幸的是,這隻適用於某些條件。有些情況下,將無法正常工作的情況下:
使用
RowDetailsTemplate
。一旦可見,虛擬化就會被破壞。我假設行的細節屬於它自己的行,所以行高再次增加。提高Collection中的Reset事件,分別爲CollectionView。根據我的經驗,這通常是
DataGrids
的數據虛擬化殺手。退化集合
Count
(這也沒有拋出重置事件的問題)。
有趣的是,增加集合的Count
確實奏效。但是我必須提高AlphaChiTech的功能(幸運的是源代碼位於github上),因爲如果沒有提高Reset事件的開箱即用(至少我沒有找到),沒有辦法改變Count
。此外,DataGrid's
項目必須立即刷新,否則會拋出異常,指出ItemsControl
和集合確實存在不一致狀態。
行細節對我來說是可選的,但刪除項目而不破壞數據虛擬化至關重要。因此,問題依然存在。我的解決方法很可能會幫助收集固定大小的人,但不幸的是不是我自己。