DataGrid
(WPFToolkit から)を継承するカスタム グリッドがあり、そこには約 10000 のアイテムがあります。組み込みの並べ替えは非常に遅いです。そのDataRowView
ため、各列のすべてのアイテムの実行中の並べ替えを保持する別のクラスを作成しました (これは、グリッドからの追加と削除が非常にまれであるためです)。
グリッドは、 のを持っておりAutoGenerateColumns='True'
、それにバインドされてDefaultView
いDataTable
ます。
をオーバーライドしOnSorting
て、列ヘッダーがクリックされたことを認識しItemsSource
、グリッドの を DataRowView のソート済みリストに置き換えようとしました。以下に方法を示します。
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
。
DataView
ソートされたリストからを作成しDataRowView
、それを に渡すのが最善の方法ItemsSource
だと思いますが、まだ成功していません。
自動生成された列を破棄せずに、行の新しいリストを ItemsSource または Items に渡す方法はありますか? すべての列を手動で生成することはできません。
乾杯、ショーン