2013-02-19 33 views
5

Tôi có một DataGrid có DataTable được đặt làm ItemsSource của nó. DataTable chứa 24 cột và ~ 1600 hàng (thực sự tôi sẽ phải tải nhiều hàng hơn sau này, nhưng bây giờ điều này là đủ rắc rối).Ảo hóa DataFrid WPF không hoạt động đúng?

Mặc dù thiết lập ảo hóa cho các cột và hàng hoạt động, DataGrid mất khoảng 30 giây để hiển thị 1600 hàng đó. Sau đó, di chuyển theo chiều dọc hoạt động tốt, theo chiều ngang là laggy, mặc dù bạn muốn mong đợi nó theo cách khác xung quanh.

Nếu tôi chạy trình thu thập bộ nhớ, tôi có thể xác minh rằng hầu hết bộ nhớ được ứng dụng sử dụng đến từ DataGridCells, Borders, ContentPresenters và Textblocks. Với tôi, điều này chỉ ra rằng lưới không ảo hóa các hàng của nó đúng cách.

Có ai có thể xác nhận rằng có sự cố với ảo hóa của DataGrid không? Hoặc là có một số loại bẫy khét tiếng trong việc thực hiện kiểm soát này?

Mong mọi loại đầu vào/đề xuất. Cảm ơn :)

+0

Tất cả các cột tiêu chuẩn cột, có nghĩa là văn bản chỉ hoặc là một số trong số chúng chứa các điều khiển như 'Hộp kiểm 'vv? – DHN

+0

Không, hai trong số đó là hộp kiểm. –

+0

Hmm, sau đó thử và xóa hai cột này hoặc thay đổi giao diện của chúng thành "chuẩn". – DHN

Trả lời

5

Tôi đã giải quyết được sự cố. DataGrid của tôi đang ngồi bên trong một ScrollViewer, trong đó nó sẽ kéo dài vô hạn. Vì vậy, nó đã bị lừa vào suy nghĩ tất cả mọi thứ có thể nhìn thấy, đó là lý do tại sao nó sẽ không ảo hóa các mặt hàng của nó. Tôi đã xóa ScrollViewer (dù DataGrid có thanh cuộn) và nó hoạt động hoàn hảo ngay bây giờ.

1

Hmm, ok Tôi không biết tại sao nhưng rõ ràng là tôi đã thêm một số văn bản keo để đăng câu trả lời ở đây. Có thể, điều này SO answer sẽ giúp bạn.

Sửa

lời khuyên Như thêm tôi muốn khuyên bạn nên suy nghĩ về cách tiếp cận của bạn. Có thực sự cần thiết phải thêm 1.6k + mục vào một số DataGrid không? Có lẽ bạn nên suy nghĩ về tải chậm trễ.

+1

Vâng, tôi đã nghĩ về điều này. Kỳ lạ, một DataGrid Winforms dường như thực hiện một cách chính xác. –

+0

Ok, còn liên kết trong câu trả lời thì sao? – DHN

+0

Hộp kiểm có vẻ không phải là vấn đề. Việc loại bỏ các cột đã nói không làm được điều đó. –

Các vấn đề liên quan