2013-09-24 16 views
10

Nie ma prawie żadnych informacji o wpływie ustawienia;Różnica między właściwościami EnableRowVirtualization i VirtualizingStackPanel.IsVirtualizing WPF DataGrid

VirtualizingStackPanel.IsVirtualizing="True" 

i

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

Może ktoś wyjaśnić, jaka jest różnica?

Dodatkowo, czy ktoś może wyjaśnić, czy EnableRowVirtualization i EnableColumnVirtualization rzeczywiście robią cokolwiek na siatce 3.5, ponieważ dokumentacja MSDN wymienia te właściwości z powrotem do wersji 4.0, ale z pewnością istnieją one w wersji 3.5?

Dzięki.

Odpowiedz

10

Zarówno IsVirtualizing, jak i działają na tej samej zasadzie, co oznacza, że ​​elementy są wizualizowane tylko w razie potrzeby, a pojemniki są ponownie wykorzystywane.

Zasadniczo Panel (lub Grid) śledzi to, co jest widoczne i jeśli to zostanie zmienione, to wykorzystuje klasę wewnętrzną, 'ItemContainerGenerator', wielkości i budowy nowych przedmiotów (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx).

Motywacją dla obu jest to, że pojemniki są generowane tylko na żądanie, co pozwala zaoszczędzić pamięć i poprawić wydajność.

Co do tego, dlaczego są dwa: urządzenie Panel jest zaprojektowane do pracy w jednym kierunku, poziomym lub pionowym; więc wdrożyli dla niego jedną przypisaną właściwość. Z drugiej strony, Grid rozciąga się w dwóch wymiarach, więc zaimplementowali właściwość dla każdego wymiaru.

Inna różnica jest akademicka: IsVirtualizing jest załączoną własnością, gdzie jego odpowiedniki dla Grid są natywnymi właściwościami. Nie trop, dlaczego oni wybrały tej różnicy ...

Istotne linki są http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspx i http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx

+1

Ciekawe wyjaśnienie dotyczące kierunku właściwości/EnableColumnVirtualization EnableRowVirtualization. Czy możesz dokładniej wyjaśnić wpływ ustawienia załączonej właściwości zamiast/jak również właściwości EnableRowVirtualization/EnableColumnVirtualization? Rozumiem, że włączają/wyłączają to samo zachowanie, ale nadal nie rozumiem, czy można z nich korzystać z drugiej strony, tj. Czy mają całkowicie nakładające się obowiązki, czy faktycznie robią różne rzeczy pod maską? – Julius

+0

Zachowanie jest zaimplementowane na poziomie * ItemsControl *, więc wpływa na klasy pochodne od niego. "Pod maską" nie ma widocznych różnic w algorytmie innym niż kierunkowość. Również ... To nie jest tak naprawdę wybór używania jednego ustawienia z drugim, ponieważ właściwości natywne powinny być używane, gdy są dostępne. –