1

数量や割引などの販売エントリを編集するためにwpfdatagridを使用しています。編集可能な各列にDataTemplateColumnを使用し、各列内のテキストボックスコントロールを使用しています。各テキストボックスは、DataTableの異なる列にバインドされています。数量を編集しているときに、正味金額を計算してその列を更新する必要があります。これは、グリッドにバインドされたデータテーブルを更新することによって行われます。編集可能な各テキストボックスの、、、などの内部のすべてを処理しますtextchanged。データグリッド選択ユニットは「セル」に設定されています。lostfocusgotfocus

現在、この方法を使用しているときに多くの問題が発生しています。textchangedtemplatecolumn内のtextboxのイベントが複数回発生し、すべての計算が間違っている場合があります。

datatemplate列を使用してグリッドを編集するための最良の方法を誰かに教えてもらえますか?テキストボックスのみをサポートするテンキーコントロールがあるため、テキストボックス自体を使用する必要があります。textchangedイベントが複数回発生するのはなぜですか?これは、グリッドを垂直方向にスクロールした場合でも発生します。

4

1 に答える 1

1

テキストボックスでUpdateSourceTrigger=PropertyChangedを設定し、RowEditEndingを使用て、ユーザーが実際に入力を完了していることを確認できます。

デフォルトでは、編集行がフォーカスを失うまで、DataGridは変更をコミットしません。さらに、TextChangedは、TextBoxコントロールが作成され、最初にテキストが入力されたときに発生します。

仮想化が開始され、DataGridが行を再利用して新しいオブジェクトを表示し、各セルでテキストが実際に変更されているため、スクロールするとTextChangedが発生すると思います。

于 2012-11-16T10:30:39.003 に答える