我有繼承DataGrid
(從WPFToolkit)已在它周圍的10000項我的自定義網格。內置的排序非常緩慢。因此我寫了一個單獨的類,它保持了運行排序的所有DataRowView
項目爲每列(這工作,因爲從電網中添加和刪除是非常很少,如果有的話)。WPF DataGrid的自定義排序:重新排列物品的ItemsSource
該網格有AutoGenerateColumns='True'
,並綁定到DataTable
的DefaultView
。
我重寫了OnSorting
以瞭解何時單擊列標題並嘗試用我的已排序的DataRowView列表替換網格的ItemsSource
。下面是方法:
private void RefreshItems()
{
if (_updating || _multiIndexer.Count == 0)
return;
try
{
_updating = true;
this.AutoGenerateColumns = false;
// replace the itemssource with my maintained and sorted list of
// DataRowView items
this.ItemsSource = _multiIndexer.ToList();
}
finally
{
//this.AutoGenerateColumns = true;
_updating = false;
}
}
的問題是,我摧毀從自動生成存在的列。另外,我只留下了與DataRowView
屬性相匹配的列。
我認爲最好的辦法是從我的DataRowView
排序列表創建DataView
並傳遞到ItemsSource
,但我還沒有取得任何結果。
任何想法如何通過行到的ItemsSource或項目的一個新的列表而不破壞自動生成列?手動生成我的所有列不是一個選項。
乾杯, 肖恩
只要我們開始在兩個方向上多列排序,內置在排序變得非常緩慢。我們所選擇的算法中要快4-10倍之間建立數據行顯示(與完成其自己的排序採取網格的時間,但不顯示此列表的排序列表...所以我到現在還是沒確定結果是否成立)。這就是爲什麼我需要顯示我沒有破壞或重建列的數據行列表 – 2012-04-20 13:55:35