Проблемът е, че когато редактирам програмно стойностите на колона в 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, те нямат тези 0000 стойности в DataRows:
Също така, за да задам стойност на клетка, задавам контроли на клетката в клетката и стойността на DataRow, за да променя стойността и да я показвам правилно:
if (oElement.GetType() == typeof(TextBox))
{
(oElement as TextBox).Text = newValue.ToString();
}
if (oElement.GetType() == typeof(TextBlock))
{
(oElement as TextBlock).Text = newValue.ToString();
}
Някой виждал ли е нещо подобно и знае ли как да се справя?
Bind
към контролите на потребителския интерфейс и вместо това манипулираме данните... ще получите много по-малко проблеми, като го правите по този начин. - person Sheridan   schedule 16.10.2013