WPF Toolkit의 DataGrid
에서 상속하는 사용자 지정 그리드에 약 10000 개의 항목이 있습니다. 내장 정렬은 매우 느립니다. 이와 같이 각 열에 대해 모든 DataRowView
항목을 실행하는 별도의 클래스를 작성했습니다 (그리드에서 추가 및 제거가 거의 발생하지 않았기 때문에 가능합니다).WPF DataGrid 사용자 지정 정렬 : ItemsSource의 항목 재정렬
그리드는 AutoGenerateColumns='True'
이고 DefaultView
은 DataTable
입니다.
열 머리글을 클릭하면 모눈의 ItemsSource
을 내 정렬 된 DataRowView 목록으로 바꿔서 OnSorting
을 무시합니다. 아래는 방법입니다.
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 또는 Items에 새 행 목록을 전달하는 방법에 대한 아이디어가 있으십니까? 수동으로 모든 열을 생성하는 것은 옵션이 아닙니다. 내가 방법을 알고 아니에요
건배, 숀
이 바로 우리가 두 방향에서 여러 열을 기준으로 정렬을 시작으로, 내장 - 정렬이 매우 느립니다. 우리가 선택한 골목은 정렬하기 위해 4-10 배 더 빠릅니다 (그리드가 자체 정렬을 완료하는 데 걸린 시간과 비교할 때이 목록을 표시하지 않고 ...) 결과가 사실인지 확인하십시오). 이것은 내가 왜 파괴하거나 열을 재건하지 않고있어 datarows의 목록을 표시해야합니다 –