2012-10-06 19 views
6

Jak mogę uzyskać listę wierszy w DataGrid? Nie związane elementy, ale lista DataGridRows.Otrzymuj wiersze datagridów

Potrzebuję kontrolować widoczność tych wierszy i możliwe jest sterowanie tylko jako DataGridRow, a nie jako obiekt danych.

Dzięki!

Odpowiedz

22

Możesz uzyskać wiersz za pomocą ItemContainerGenerator. To powinno działać -

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

Jedną rzeczą, aby pamiętać, jest to, że gdy wirtualizacja jest na (która jest domyślnie), to będzie pobierz 'null' dla wierszy, które nie zostały utworzone. Oznacza to, że nie będzie można iterować przez wszystkie wiersze w jednym przebiegu, chyba że ustawisz 'VirtualizingStackPanel.IsVirtualizing =" False "' na swojej DataGrid - ale może to spowodować niską wydajność twojej sieci. –

0

Polecam definiowania stylów dla DataGridRow który będzie miał swoją widoczność związany, czy powinien on być wyświetlane czy nie. Samo powtarzanie wierszy nie będzie wystarczające, jak wspomniałem w odpowiedzi @ RV1987.

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

EDIT:

Co wiąże się zależy od miejsca przechowywania informacji o tym, czy należy wyświetlić wiersz. Na przykład, jeśli każdy obiekt danych w oprawionego kolekcji ma właściwość bool ShouldBeDisplayed, to masz coś takiego:

<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

Wiązanie czego? To nie jest uielemnt ... możesz być bardziej konkretny? – user196625

+0

@ user196625 Zaktualizowałem moją odpowiedź. Mam nadzieję, że to jest bardziej jasne. –

+0

thank u Sprawdzę to – user196625