2013-09-24 21 views
10

Non vi sono quasi informazioni sull'impatto dell'impostazione;Differenza tra WPF DataGrid EnableRowVirtualization e VirtualizingStackPanel.IsVirtualizing properties

VirtualizingStackPanel.IsVirtualizing="True" 

e

EnableRowVirtualization="True" EnableColumnVirtualization="True". 

qualcuno può chiarire qual è la differenza?

Inoltre, come bonus aggiuntivo, qualcuno può chiarire se EnableRowVirtualization e EnableColumnVirtualization in realtà fare nulla sulla griglia 3.5 come la documentazione MSDN elenca solo queste proprietà torna a 4.0, ma sicuramente esistono in 3.5?

Grazie.

risposta

10

Entrambe IsVirtualizing e EnableRowVirtualization/EnableColumnVirtualization funzionano secondo lo stesso principio, ovvero che gli elementi vengono visualizzati solo quando necessario e i contenitori vengono riutilizzati.

Essenzialmente, il Panel (o Grid) registra ciò che è visibile e se questo è cambiato, si utilizza una classe interna, 'ItemContainerGenerator', alle dimensioni e costruire nuovi elementi (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx).

La motivazione per entrambi è che i contenitori vengono generati solo su richiesta risparmiando così memoria e migliorando le prestazioni.

Sul motivo per cui ce ne sono due: lo Panel è progettato per estendersi solo in una direzione, orizzontale o verticale; quindi hanno implementato una singola proprietà associata per esso. A Grid, d'altra parte, si estende in due dimensioni, quindi hanno implementato una proprietà per ogni dimensione.

L'altra differenza è accademico: IsVirtualizing è una proprietà associata, mentre le sue controparti per il Grid sono proprietà native. Nessun indizio sul motivo per cui si è optato per questa differenza ...

collegamenti rilevanti sono http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.100).aspx e http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.isvirtualizing.aspx

+1

chiarimento interessante riguardante la direzione delle proprietà/EnableColumnVirtualization EnableRowVirtualization. Puoi chiarire ulteriormente l'impatto dell'impostazione della proprietà associata anziché/così come le proprietà EnableRowVirtualization/EnableColumnVirtualization? Capisco che attivano/disattivano lo stesso tipo di comportamento, ma non riesco ancora a capire se è possibile utilizzarne uno sull'altro, cioè hanno responsabilità completamente sovrapposte o, in realtà, fanno cose diverse sotto il cofano? – Julius

+0

Il comportamento è implementato al livello * ItemsControl *, quindi influenza le classi derivate da esso. 'Sotto il cofano' non ci sono differenze evidenti nell'algoritmo oltre alla direzionalità. Inoltre ... Non è davvero una scelta di utilizzare un'impostazione rispetto all'altra perché le proprietà native dovrebbero essere utilizzate quando sono disponibili. –