【发布时间】:2012-08-19 06:06:11
【问题描述】:
如果我在 DataGrid 中有一个 DataGridCheckBoxColumn(而不是使用数据网格的多选模式),我如何跟踪或发现哪些行已被检查?
DataGrid 中是否有合适的属性来枚举每一行并检查列? DataGrid.ItemsSource 将为我提供基础集合 - 我希望能够自己获取网格行项目中的列
如果我响应 CheckBox 的 Click 事件,我如何确定该 CheckBox 属于基础集合中哪个项目的哪一行?
<DataGrid x:Name="dgPlayers" AutoGenerateColumns="False" Height="450" CanUserAddRows="False" AlternationCount="2" AlternatingRowBackground="WhiteSmoke" GridLinesVisibility="None">
<DataGrid.Columns>
<DataGridCheckBoxColumn></DataGridCheckBoxColumn>
<DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"></DataGridTextColumn>
<DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"></DataGridTextColumn>
<DataGridTextColumn Header="Position" Binding="{Binding Path=PositionCode, Converter={StaticResource NFLPositionGrouper}}"></DataGridTextColumn>
<DataGridTextColumn Header="College" Binding="{Binding Path=CollegeName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
如您所见,我没有将 DataGridCheckBoxColumn 绑定到任何属性 - 我的目的是使用它进行选择(是的,我知道,DataGrid 已经内置了多项选择......这纯粹是一个学术练习)
【问题讨论】:
-
你的 DataGrid 是如何获得它的行的?带绑定?到什么?显示 Xaml。我的想法是:迭代你绑定的对象怎么样?
-
通过将代码隐藏中的 ItemsSource 设置为对强类型对象的 LINQ to Entities 查询来填充网格 - 没什么特别的。迭代集合中的对象如何让我访问相应的 DataGrid 行?
-
在后面的代码中,使用公共属性引发 PropertyChange,它是存储类的 List(或其他 IEnumerable)。然后在某个时刻你用 Linq Query 填充它。在 Xaml 中,您将 ItemSource 绑定到属性。因此,您可以随时使用该属性访问任何行的值。
-
你能发布你的 xaml 控件吗?您应该将复选框列绑定到您的实际 DTO。由于它们已绑定,您应该能够查看您的实际数据收集以查看已检查或未检查的内容
-
已发布。我没有将 CheckBox 列绑定到绑定对象的任何属性......不过,这是一个很好的观点。我主要来自 ASP.NET 背景,因此我想利用这个示例来熟悉导航网格行的对象层次结构,并在需要时访问每个网格行内的各个控件