2013-09-24 91 views
10

Hầu như không có thông tin nào về tác động của cài đặt;Sự khác biệt giữa các thuộc tính EnableRowVirtualization và VirtualizingStackPanel.IsVirtualizing của WPF DataGrid

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

Ai đó có thể làm rõ những gì là sự khác biệt?

Ngoài ra, như một phần thưởng bổ sung, bất kỳ ai có thể làm rõ nếu EnableRowVirtualization và EnableColumnVirtualization thực sự làm bất cứ điều gì trên lưới 3,5 như tài liệu MSDN chỉ liệt kê các thuộc tính này trở lại 4.0, nhưng họ chắc chắn tồn tại trong 3,5?

Cảm ơn.

Trả lời

10

Cả hai IsVirtualizingEnableRowVirtualization/EnableColumnVirtualization hoạt động trên cùng một nguyên tắc, là các mục chỉ được hiển thị khi cần và các thùng chứa được sử dụng lại.

Về cơ bản, Panel (hoặc Grid) theo dõi những gì có thể nhìn thấy và nếu điều này được thay đổi, nó sử dụng một lớp bên trong, 'ItemContainerGenerator', kích thước và xây dựng các mặt hàng mới (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx).

Động lực cho cả hai là các thùng chứa chỉ được tạo theo yêu cầu, do đó tiết kiệm bộ nhớ và cải thiện hiệu suất.

Vì sao có hai: Panel được thiết kế để mở rộng theo một hướng duy nhất, theo chiều ngang hoặc chiều dọc; vì vậy họ đã triển khai một thuộc tính đính kèm duy nhất cho nó. Mặt khác, Grid mở rộng theo hai chiều, vì vậy chúng đã triển khai thuộc tính cho mỗi thứ nguyên.

Sự khác biệt khác là học tập: IsVirtualizing là thuộc tính được đính kèm, cho biết các đối tác của nó đối với Grid là các thuộc tính gốc. Không có đầu mối là tại sao họ chọn cho sự khác biệt này ...

liên kết có liên quan là http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspxhttp://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx

+1

rõ Thú vị liên quan đến sự chỉ đạo của các thuộc tính/EnableColumnVirtualization EnableRowVirtualization. Bạn có thể tiếp tục làm rõ tác động của việc thiết lập thuộc tính đính kèm thay vì/cũng như các thuộc tính EnableRowVirtualization/EnableColumnVirtualization không? Tôi hiểu rằng họ bật/tắt cùng một loại hành vi, nhưng tôi vẫn không hiểu liệu một người có thể được sử dụng cho người khác hay không, tức là họ có trách nhiệm chồng chéo hoàn toàn hay thực sự làm những việc khác nhau dưới mui xe? – Julius

+0

Hành vi được thực hiện ở cấp * ItemsControl *, do đó ảnh hưởng đến các lớp bắt nguồn từ nó. 'Dưới mui xe' không có sự khác biệt dễ thấy trong thuật toán khác ngoài hướng. Ngoài ra ... Nó không thực sự là một sự lựa chọn của việc sử dụng một thiết lập trên khác vì các thuộc tính bản địa nên được sử dụng khi chúng có sẵn. –