2012-10-06 16 views
6

Come posso ottenere l'elenco di righe in DataGrid? Non gli articoli associati, ma l'elenco DataGridRows.Ottieni righe dati automatiche

Ho bisogno di controllare la visibilità di queste righe ed è possibile controllarlo solo come DataGridRow e non come oggetto dati.

Grazie!

risposta

22

È possibile ottenere la riga utilizzando ItemContainerGenerator. Questo dovrebbe funzionare -

for (int i = 0; i < dataGrid.Items.Count; i++) 
{ 
    DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator 
               .ContainerFromIndex(i); 
} 
+7

Una cosa da notare qui è che quando la virtualizzazione è in (che lo è di default), sarà ottenere 'null' per le righe che non sono state create. Ciò significa che non sarà possibile eseguire iterazioni su tutte le righe in un'unica esecuzione, a meno che non si imposti 'VirtualizingStackPanel.IsVirtualizing =" False "' sul proprio DataGrid, ma ciò potrebbe causare scarse prestazioni della griglia. –

0

mi consiglia di definire uno stile per DataGridRow che avrà la sua visibilità legata a se debba essere visualizzato o meno. Basta scorrere le righe non sarà sufficiente, come ho detto nella risposta di @ RV1987.

<DataGrid> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="Visibility" Value="{Binding ...}" /> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 

EDIT:

Cosa si associa a dipende da dove si tiene l'informazione di se o non si dovrebbe visualizzare la riga. Ad esempio, se ogni oggetto di dati nella vostra collezione bound ha una proprietà bool ShouldBeDisplayed, si dovrebbe avere qualcosa di simile:

<DataGrid> 
    <DataGrid.Resources> 
     <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" /> 

     <Style TargetType="DataGridRow"> 
      <Setter Property="Visibility" Value="{Binding Path=ShouldBeDisplayed, Converter={StaticResource booleanToVisibilityConverter}}" /> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 
+0

Legame di cosa? Questo non è un problema ... puoi essere più specifico? – user196625

+0

@ user196625 Aggiornato la mia risposta. Spero che questo sia più chiaro. –

+0

thank u Controllerò che – user196625