如何获取listview wpf中的所有行

时间:2010-02-07 20:03:06

标签: wpf listview

我有一个列表视图,其中有一个包含四列的网格视图。列表视图的itemsSource是IList(Of SomeType)。网格中的每个单元格都包含一个复选框,根据绑定属性中的值检查/取消选中这些复选框。现在我想要检索列表/网格视图中的所有行以进行保存,或者至少检查所有选中的复选框。我找不到合适的方法来做到这一点。

以下是我创建listview的方法。

                <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>

任何人都可以帮助我????

2 个答案:

答案 0 :(得分:2)

您可以遍历ListView的Items对象以获取值:

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
    }
}

答案 1 :(得分: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中的任何语法错误)

如果您确实需要访问表示UI控件中物理行的ListViewItem控件,您可以使用ItemContainerGenerator获取它们:

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