2012-10-06 38 views
6

如何獲取DataGrid中的行列表?不是綁定的項目,而是 DataGridRows列表。獲取datagrid行

我需要控制這些行的可見性,它只能將其控制爲DataGridRow而不是數據對象。

謝謝!

回答

22

您可以使用ItemContainerGenerator獲得該行。這應該工作 -

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

這裏有一點要注意的是,當虛擬化(這是默認設置),你會爲未創建的行獲取'null'。這意味着,除非在DataGrid上設置了「VirtualizingStackPanel.IsVirtualizing =」False「,否則您將無法在一次運行中迭代所有行,但這可能會導致您的網格性能較差。 –

0

我建議定義DataGridRow,將有其知名度勢必是否應該或不顯示樣式。僅僅遍歷行就不夠,正如我在@ RV1987的回答中提到的那樣。

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

編輯:

綁定到什麼取決於你持有的你是否應該顯示該行的信息。例如,如果您綁定的集合中的每個數據對象都有一個bool ShouldBeDisplayed屬性,你有這樣的事情:

<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

什麼的綁定?這不是一個uielemnt ...你能更具體嗎? – user196625

+0

@ user196625更新了我的答案。希望這更清楚。 –

+0

感謝ü我會檢查它 – user196625