問題は、データグリッドでプログラムで列の値を編集して下にスクロールすると、それらの値が列の次のセルで繰り返されて表示されることです。これは、仮想化のバグまたは「効果」のように思えます。電源を切ると問題がなくなるからです。問題は次の場所にあると思います。
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();
}
誰かが似たようなものを見たことがあり、それに対処する方法を知っていますか?