Ответ 1
Оба 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