访问不在绑定列表中的Datagridviewcolumn

时间:2019-07-12 14:16:39

标签: c# wpf

我想添加一个不在绑定源中的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是从实体框架创建的实体。

1 个答案:

答案 0 :(得分:3)

Items中的项目不知道用户界面中的任何CheckBox。这就是为什么您应该将其绑定到项目的属性:

<DataGridCheckBoxColumn Binding="{Binding YourProperty}" Header="Mark" />

否则,由于默认情况下启用了UI虚拟化,因此在滚动浏览各行时CheckBox的状态可能会丢失或损坏。

如果不进行绑定,则获取CheckBox的值的唯一方法是遍历UI中的可视元素,并且如果其中的一些虚拟化了,则无法使用。

  

我没有ViewModel中的此属性,因为ViewModel是首先使用数据库的EntityFramework,并且我直接从该属性无用的数据库中填充Datagrid。

实体框架会生成部分类,因此您可以创建另一个具有相同名称的部分类,并将属性添加到该部分类中。或将实体包装在视图模型类中,然后在DataGrid中使用它而不是实体类。