2013-09-24 97 views
10

幾乎沒有關於設置的影響的信息;WPF DataGrid的EnableRowVirtualization和VirtualizingStackPanel.IsVirtualizing屬性之間的區別

VirtualizingStackPanel.IsVirtualizing="True" 

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

有人可以明確的區別是什麼?另外,作爲額外的獎勵,任何人都可以澄清EnableRowVirtualization和EnableColumnVirtualization實際上是否在3.5網格上做了任何事情,因爲MSDN文檔僅將這些屬性列爲4.0,但它們肯定存在於3.5中?

謝謝。

回答

10

IsVirtualizingEnableRowVirtualization/EnableColumnVirtualization的操作原理是相同的,即只有在需要時才能將物品可視化並重新使用容器。

從本質上講,Panel(或Grid)跟蹤的內容是可見的,如果這個改變時,它使用一個內部類,'ItemContainerGenerator',大小和建立新的項目(http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx)。

兩者的動機是容器只能按需生成,從而節省內存並提高性能。

至於爲什麼有兩個:Panel被設計爲只在一個方向上,水平或垂直延伸;所以他們爲它實施了一個附屬的財產。另一方面,A Grid在兩個維度上延伸,因此它們爲每個維度實現了一個屬性。

其他區別是學術性的:IsVirtualizing是一個附屬的屬性,其中Grid的對應物是本地屬性。沒有線索,爲什麼他們選擇了這種差異?

相關鏈接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

關於EnableRowVirtualization/EnableColumnVirtualization性質的方向有趣的澄清。您能否進一步闡明設置附加屬性而不是/以及EnableRowVirtualization/EnableColumnVirtualization屬性的影響?我明白他們打開/關閉了同樣的行爲,但是我還是不明白是否可以使用另一種行爲,即他們是否有完全重疊的責任,或者實際上在不同的情況下做了不同的事情? – Julius

+0

行爲在* ItemsControl *級別實現,因此影響從它派生的類。除了方向性之外,「引擎蓋下」算法沒有明顯的差異。另外...它不是一種使用一種設置而不是另一種設置的選擇,因爲當它們可用時應該使用本地屬性。 –

相關問題