为什么ItemContainerGenerator.ContainerFromIndex()返回null以及如何避免这种行为?

JPC*_*PCF 15 .net c# wpf datagrid datarow

我正在使用此代码段来分析我在数据网格上选择的行.

for (int i = 0; i < dgDetalle.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dgDetalle.ItemContainerGenerator.ContainerFromIndex(i);
    FrameworkElement cellContent = dgDetalle.Columns[0].GetCellContent(row);
    // ... code ...
}
Run Code Online (Sandbox Code Playgroud)

循环运行平稳,但在处理某些索引时,第二行会抛出一个空异常.MSDN的文档说ItemContainerGenerator.ContainerFromIndex(i)如果'如果项目没有实现'将返回null,但这无助于我猜测如何获得所需的值.

如何扫描所有行?还有其他方法吗?

UPDATE

我正在使用这个片段来阅读这里CheckBox解释的内容.所以除非我改变很多东西,否则我不能使用绑定或根本不使用绑定.我不能.我正在进行代码维护.ItemSource

BIB*_*NJU 17

试试这个,

DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
        if (row == null)
        {
                          grid.UpdateLayout();
            grid.ScrollIntoView(grid.Items[index]);
            row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
        }
Run Code Online (Sandbox Code Playgroud)


H.B*_*.B. 8

DataGrid是虚拟化的物品,当行是鉴于各行(即容器)仅创建.

您可以关闭虚拟化(如果您有许多项目,第一次加载非常慢,内存使用率也会更高),或者您只是迭代数据并检查应绑定的数据对象属性的值到数据网格.通常你根本不需要UI元素......