2012-10-06 19 views
6

¿Cómo puedo obtener la lista de filas en el DataGrid? No los elementos vinculados, pero la lista DataGridRows.Obtener filas de la cuadrícula de datos

Necesito controlar la visibilidad de estas filas y solo es posible controlarlo como DataGridRow y no como un objeto de datos.

Gracias!

Respuesta

22

Puede obtener la fila usando ItemContainerGenerator. Esto debería funcionar -

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

Una cosa a tener en cuenta es que cuando la virtualización está en (que es por defecto), se quiere obtener 'null' para las filas que no fueron creadas. Esto significa que no podrá iterar a través de todas las filas en una sola ejecución, a menos que configure 'VirtualizingStackPanel.IsVirtualizing =" False "' en su DataGrid, pero esto puede ocasionar que su grid tenga un bajo rendimiento. –

0

Recomiendo que define un estilo para DataGridRow que tendrá su visibilidad con destino a si se debe mostrar o no. Simplemente iterar a través de las filas no será suficiente, como mencioné en la respuesta de @ RV1987.

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

EDIT:

Lo que ates a depende de donde se mantiene la información de si debe o no mostrar la fila. Por ejemplo, si cada objeto de datos en su colección encuadernada tiene una propiedad bool ShouldBeDisplayed, tendría algo como esto:

<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

Encuadernación de qué? Esto no es un uielemnt ... ¿puede ser más específico? – user196625

+0

@ user196625 Actualizado mi respuesta. Espero que esto sea más claro. –

+0

agradece u lo comprobaré – user196625

Cuestiones relacionadas