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

问题描述 投票:16回答:4

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

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

循环运行顺利,但是在处理某些索引时,第二行引发null异常。 MSDN的文档说,如果“如果未实现该项目”,ItemContainerGenerator.ContainerFromIndex(i)将返回null,但这无法帮助我猜测如何获得所需的值。

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

UPDATE

我正在使用此代码段读取CheckBox,如here所述。因此,除非我做了很多更改,否则根本无法使用绑定或ItemSource。我不能。我正在执行代码维护。

c# .net wpf datagrid datarow
4个回答
8
投票

DataGrid正在虚拟化项目,仅在查看该行时才创建相应的行(即容器)。>

您可能会选择turn off virtualization(如果您有很多项目,第一次加载会非常慢,而且内存使用量也会更高),或者您只需遍历数据并检查数据对象属性的值即可绑定到数据网格。通常,您根本不需要UI元素...


18
投票

尝试一下,


3
投票

使用此订阅:


0
投票

除了其他答案:控件类的构造函数(页面/窗口/等)中没有可用的项目。

© www.soinside.com 2019 - 2024. All rights reserved.