C# 重复使用DataGrid控件值

C# 重复使用DataGrid控件值,c#,wpf,datagrid,virtualization,C#,Wpf,Datagrid,Virtualization,问题是,当我以编程方式编辑datagrid中的列值并向下滚动时,这些值会在列的下一个可见单元格中重复。这看起来像是虚拟化错误或“效果”,因为当我关闭它时,问题就消失了。我认为问题出在这里: public void EditedCell(object oItem, string oColumnName, ref List<string> lErrors, object newValue = null) { DataGridRow dgRow = dgDati.ItemConta

问题是,当我以编程方式编辑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);
}

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

不要通过过程代码操纵WPF控件。这不是问题所在。在WPF中,您应该操作绑定到UI的数据,而不是直接操作UI。这种设计模式被称为,它将使您省去所有这些麻烦。

不要通过过程代码操纵WPF控件。这不是问题所在。在WPF中,您应该操作绑定到UI的数据,而不是直接操作UI。这种设计模式被称为并将让您省去所有这些麻烦。

引用@HighCore的关键点——“不要通过过程代码操纵WPF控件”:)将为您省去所有这些麻烦,正如@Omribitan悄悄暗示的那样,以编程方式操纵UI控件不是WPF的方式。通常,我们将绑定到UI控件并操作数据。。。这样做的问题会少得多。@Omribitan谢谢你传播这个词=)。现在我知道我并不孤单。@Omribitan是的,我在MVVM的道路上做了一些事情,并且成功了。请给出一些答案,这样我才能批准。引用@HighCore's clincher-“不要通过过程代码操纵WPF控件”:)将为您省去所有这些麻烦,正如@Omribitan悄悄暗示的那样,以编程方式操纵UI控件不是WPF的方式。通常,我们将绑定到UI控件并操作数据。。。这样做的问题会少得多。@Omribitan谢谢你传播这个词=)。现在我知道我并不孤单。@Omribitan是的,我在MVVM的道路上做了一些事情,并且成功了。请发布一些答案,以便我批准。
if (oElement.GetType() == typeof(TextBox))
{
    (oElement as TextBox).Text = newValue.ToString();
}

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