c# - 访问不在绑定(bind)列表中的 Datagridview 列

标签 c# wpf

我想添加一个不在绑定(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/

相关文章:

具有自动完成/自动过滤器的 WPF 组合框?

c# - 函数引用与 Action<T> 有何不同

ListBox 中的 C# Split()

c# - 在 C# 中使用带有 API key 的 HttpClient 类的 PostAsync 方法

c# - 使用 linq 表达式的 params 数组

c# - 如何在 c# wpf 中使用本地数据库 .sdf?

wpf - 如何使 Resharper 解析 CustomBinding MarkupExtension 的路径

WPF-ControlTemplate上的事件?

c# - 从 Roslyn 中的行号获取节点

wpf - 将 RenderTargetBitmap 转换为 Bitmap