1

问题是,当我在 datagrid 中以编程方式编辑列值并向下滚动时,这些值会在列的下一个单元格中重复,这些单元格变得可见。这似乎是虚拟化错误或“效果”,因为当我关闭它时,问题就消失了。我认为问题出在这个地方:

public void EditedCell(object oItem, string oColumnName, ref List<string> lErrors, object newValue = null)
{
    DataGridRow dgRow = dgDati.ItemContainerGenerator.ContainerFromItem(oItem) as DataGridRow;
    /* In other places, when I call EditedCell(DataGridRow, ...) it works fine.
       The problem shows up only when I call EditedCell(object oItem, ...) */
    EditedCell(dgRow, oColumnName, ref lErrors, newValue);
}

这是问题的屏幕。由于此问题,黄色单元格以编程方式更改,并显示其他包含 0000 的单元格。当我从 DataSource 读取数据时,它在 DataRows 中没有那些 0000 值:

在此处输入图像描述

另外要设置单元格的值,我在单元格和 DataRow 值中设置单元格控件以更改值并正确显示它:

if (oElement.GetType() == typeof(TextBox))
{
    (oElement as TextBox).Text = newValue.ToString();
}

if (oElement.GetType() == typeof(TextBlock))
{
    (oElement as TextBlock).Text = newValue.ToString();
}

有没有人见过类似的东西并知道如何处理?

4

1 回答 1

1

不要通过程序代码操作 WPF 控件。这不是WPF 方式。在 WPF 中,您应该操作绑定到 UI 的数据,而不是直接操作 UI。这种设计模式被称为MVVM,可以让您免去所有这些麻烦。

于 2013-10-17T10:49:07.977 回答