首页 > 解决方案 > 不使用 GetVisualChild 从 DataGrid 获取单元格值

问题描述

这个站点上有一个解决方案,它处理DataGrid使用绑定集合获取单元格值的问题。在该解决方案中,引用GetVisualChild<T>了... 获取数据网格中的所有单元格

显然,MS 以其无限的智慧决定弃用GetVisualChild<T>,只有GetVisualChild(int).

我知道我们被指示使用绑定对象,但有时,您只需要直接使用网格数据即可。

有没有人有从DataGrid(WPF)无绑定对象获取单元格值的成功方法?

标签: c#wpf

解决方案


您遇到的问题是,如果DataGrid未绑定,那么您将依靠单元格内容来查找值,但是如果某些值在复选框中,而某些值在文本块中,那么您没有简单的方法可以做到这一点。

您可以做的是使用DataGrid's ItemContainerGenerator获取行,然后遍历行单元格以尝试提取值。

也许您的代码看起来像这样:

foreach (var item in grid.Items)
{
    var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
    if (row == null)
        continue;
    foreach (var column in grid.Columns)
    {
        if (!(column.GetCellContent(row) is TextBlock))
            continue;
        var cell = column.GetCellContent(row) as TextBlock;
        var text = cell?.Text; // this is the cell value
    }
}

推荐阅读