我想添加一个不在绑定(bind)源中的 DatagridCheckBoxColumn,这样我就可以通过 gui 选择特定的行。然后我想遍历数据网格并为每个选定的行调用一个存储过程。
<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>
我尝试遍历 Datagrid.Items 和 Datagrid.Itemssource 但我无法访问 CheckBoxColumn 值/CheckBoxColumn。
这种方法可行吗?有没有更好的办法?
编辑:
我在 ViewModel 中没有这个属性,因为 ViewModel 是首先使用数据库的 EntityFramework,我直接从数据库填充 Datagrid,其中属性是无用的。
private ObservableCollection<SDH_CRModul_Sniffer> myGridData;
public ObservableCollection<SDH_CRModul_Sniffer> MyGridData
{
get { return myGridData; }
set
{
if (myGridData == value) return;
myGridData = value;
OnPropertyChanged("MyGridData");
}
}
其中 SDH_CRModul_Sniffer 是从 Entity Framework 创建的实体。
最佳答案
Items
中的项目不知道 UI 中的任何 CheckBox
。这就是为什么你应该将它绑定(bind)到一个项目的属性:
<DataGridCheckBoxColumn Binding="{Binding YourProperty}" Header="Mark" />
如果不这样做,由于默认启用的 UI 虚拟化,CheckBox
的状态可能会在您滚动浏览行时丢失或损坏。
如果不绑定(bind),获取 CheckBox
值的唯一方法是遍历 UI 中的可视元素,如果其中一些被虚拟化,这将不起作用.
I have this Property not in the ViewModel, because the ViewModel is EntityFramework with Database first and I fill the Datagrid directly from the Database, where the Property is useless.
Entity Framework 生成分部类,这样您就可以创建另一个同名的分部类,并将属性添加到该分部类中。或者将实体包装在 View 模型类中,并在 DataGrid
中使用它而不是实体类。
关于c# - 访问不在绑定(bind)列表中的 Datagridview 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57008830/