2010-02-07 109 views
0

我有一個列表視圖,它具有包含四列的網格視圖。 listview的itemsSource是一個IList(OfTypeType)。網格中的每個單元格都包含一個複選框,該複選框基於綁定屬性中的值進行選中/取消選中。現在我想檢索列表/網格視圖中的所有行以進行保存或至少檢查所有這些複選框。我找不到一個合適的方法來做到這一點。如何獲取列表視圖中的所有行wpf

這是我如何創建我的列表視圖。

   <ListView Margin="10, 40, 95, 10" x:Name="ListViewPane"> 
        <ListView.View> 
         <GridView x:Name="gridColumns"> 
          <GridViewColumn Width="auto" Header="Right" DisplayMemberBinding="{Binding Name}"/> 
          <GridViewColumn Width="auto" Header="Read"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanRead}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Width="auto" Header="Write"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanWrite}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
          <GridViewColumn Width="auto" Header="Delete"> 
           <GridViewColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding CanDelete}"/> 
            </DataTemplate> 
           </GridViewColumn.CellTemplate> 
          </GridViewColumn> 
         </GridView> 
         </ListView.View> 
       </ListView> 

誰能幫我????

回答

1

您需要將IsChecked Bindings設置爲Mode = TwoWay,例如,

IsChecked="{Binding CanRead, Mode=TwoWay}" 

然後,當用戶檢查和取消選中框時,WPF將更新您的業務對象。

現在你可以直接從你的業務對象集合(該的ItemsSource)收集的值:

For Each busobj In ListViewPane.ItemsSource 
    If busobj.CanDelete Then 
    ' whatever 
    End If 
Next 

(請原諒在VB任何語法錯誤)

如果你真的需要訪問的ListViewItem代表UI控件中物理行的控件,您可以使用ItemContainerGenerator獲取它們:

For Each busobj In ListViewPane.ItemsSource 
    Dim lvi As ListViewItem = CType(ListViewPane.ItemContainerGenerator.ContainerFromItem(busobj), ListViewItem) 
Next 
+0

非常感謝itowlson – Xience 2010-02-08 14:28:32

2

您可以迭代throu GH的ListView的項目對象來獲取值:

foreach(var item in this.ListViewPane.Items) 
{ 
    var ofSomeType = item as OfSomeType; 
    if(ofSomeType != null) 
    { 
     string name = ofSomeType.Name; 
     bool canDelete = ofSomeType.CanDelete; 
     bool canRead = ofSomeType.CanRead; 
     bool canWrite = ofSomeType.CanWrite; 

     // do stuff with your Of Some Type objects 
    } 
} 
+0

當涉及到WPF,一定要使用,而不是ListViewItem的「變種」的foreach語句,否則你會得到一個編譯錯誤。 ListView.Item不一定與ListViewItem相同,可能會混淆一些。 – 2015-07-09 12:40:34

相關問題