19

GUI にタブ コントロールがあり、タブの 1 つに WPF 4.0 データグリッドがあります。グリッド内のセルをクリックして何かを編集してからタブを切り替えると、Defer Refresh エラーが発生します。

AddNew または EditItem トランザクション中は DeferRefresh は許可されません。

datagrid.CancelEdit(DataGridEditingUnit.Row)そのため、保留中の編集をキャンセルするためにタブが切り替えられたときに呼び出し、更新の延期の問題はなくなりました。

しかし、私が本当にやりたいことはCommitEdit()、ユーザーがデータを再入力する必要がないようにすることです。

そしてdatagrid.CommitEdit(DataGridEditingUnit.Row, true)、私にはうまくいきません。以下のエラーが表示されCommitEnd()ます:

ディスパッチャの処理が中断されている間は、この操作を実行できません。

PS: datagrid.CommitEdit() と datagrid.CommitEdit(DataGridEditingUnit.Column, true) を試しましたが、うまくいきませんでした。

4

5 に答える 5

4

私はこれに遭遇したことがあります。WPF は、現在のタブのビューのみをメモリに保持します。タブを切り替えると、WPF は現在のビューをアンロードし、選択したタブのビューをロードします。ただし、現在 AddNew または EditItem トランザクションを実行していて、WPF がそれをアンロードしようとすると、DataGrid はこの例外をスローします。

私にとっての解決策は、すべてのタブ ビューをメモリに保持し、現在のタブのビューのみを表示するように設定することでした。このリンクは、これを行う方法を示しています。

WPF TabControl - タブ変更時のアンロードを防止しますか?

この変更により、ビューを再生成する必要がないため、タブを切り替えるときにタブがよりスムーズに読み込まれます。私の場合、追加のメモリ使用量は妥当なトレードオフでした。

于 2013-12-06T18:29:19.370 に答える
0

データのソースである DataTable への変更を「コミット」することで、同様の問題を解決しました。

したがって、ソースに DataTable がある場合は、次のコードを試すことができます。

DataTableSource.AcceptChanges();
于 2014-09-24T08:22:32.393 に答える