2013-09-24 1 views
10

Информация о влиянии настройки практически отсутствует.Разница между WPF DataGrid EnableRowVirtualization и VirtualizingStackPanel.IsВиртуализующие свойства

VirtualizingStackPanel.IsVirtualizing="True" 

и

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

Может кто-то выяснить, в чем разница?

Кроме того, в качестве дополнительного бонуса может кто-нибудь пояснить, действительно ли EnableRowVirtualization и EnableColumnVirtualization ничего не делают на сетке 3.5, поскольку документация MSDN перечисляет эти свойства только в 4.0, но они определенно существуют в 3.5?

Спасибо.

ответ

10

И IsVirtualizing, и EnableRowVirtualization/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).aspx и http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx

+1

Интересное разъяснение относительно направления свойств/EnableColumnVirtualization EnableRowVirtualization. Можете ли вы еще раз прояснить влияние настройки прикрепленного свойства вместо /, а также свойства EnableRowVirtualization/EnableColumnVirtualization? Я понимаю, что они включают/отключают одно и то же поведение, но я до сих пор не понимаю, можно ли использовать друг друга, т. Е. Полностью ли они перекрывают обязанности или на самом деле делают разные вещи под капотом? – Julius

+0

Поведение реализуется на уровне * ItemsControl *, поэтому затрагивает классы, полученные из него. «Под капотом» нет никаких заметных отличий в алгоритме, кроме направленности. Также ... На самом деле это не выбор одной настройки над другой, потому что собственные свойства должны использоваться, когда они доступны. –

Смежные вопросы