我想添加一个不在绑定源中的DatagridCheckBoxColumn,所以我可以通过gui选择特定的行。然后,我想遍历datagrid并为每个选定的行调用存储过程。
SELECT COUNT(*)
FROM Results
WHERE Cellname= 'Cell 3'
我试图遍历Datagrid.Items和Datagrid.Itemssource,但无法访问CheckBoxColumn值/ CheckBoxColumn。
这种方法可行吗?有更好的方法吗?
编辑:
我没有ViewModel中的此属性,因为ViewModel是首先使用数据库的EntityFramework,并且我直接从该属性无用的数据库中填充Datagrid。
<DataGrid
x:Name="G_DG_Data"
Grid.Row="0"
Grid.RowSpan="1"
Grid.Column="0"
Grid.ColumnSpan="3"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
ClipboardCopyMode="IncludeHeader"
ItemsSource="{Binding MyGridData}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Mark" />
<DataGridTextColumn Binding="{Binding Data}" Header="Data" />
</DataGrid.Columns>
</DataGrid>
其中SDH_CRModul_Sniffer是从实体框架创建的实体。
答案 0 :(得分:3)
Items
中的项目不知道用户界面中的任何CheckBox
。这就是为什么您应该将其绑定到项目的属性:
<DataGridCheckBoxColumn Binding="{Binding YourProperty}" Header="Mark" />
否则,由于默认情况下启用了UI虚拟化,因此在滚动浏览各行时CheckBox
的状态可能会丢失或损坏。
如果不进行绑定,则获取CheckBox
的值的唯一方法是遍历UI中的可视元素,并且如果其中的一些虚拟化了,则无法使用。
我没有ViewModel中的此属性,因为ViewModel是首先使用数据库的EntityFramework,并且我直接从该属性无用的数据库中填充Datagrid。
实体框架会生成部分类,因此您可以创建另一个具有相同名称的部分类,并将属性添加到该部分类中。或将实体包装在视图模型类中,然后在DataGrid
中使用它而不是实体类。