我有一个列表视图,其中有一个包含四列的网格视图。列表视图的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>
任何人都可以帮助我????
答案 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