1

問題は、データグリッドでプログラムで列の値を編集して下にスクロールすると、それらの値が列の次のセルで繰り返されて表示されることです。これは、仮想化のバグまたは「効果」のように思えます。電源を切ると問題がなくなるからです。問題は次の場所にあると思います。

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 に答える