4

編集可能なセルを含む DataGrid があります。行がフォーカスを失うと、プロパティ変更イベントが発生し、変更をエンティティ オブジェクトにコミットし、最終的にはデータベースにコミットすることで処理します。ユーザーは、データグリッドの外側を右クリックして、コンテキスト メニューから選択できます。一部のコンテキスト メニュー項目は、データグリッド内のデータに依存しています (正確には、コミットされたデータに依存しています)。ただし、問題は、DataGrid の外側で右クリックしても、DataGrid からフォーカスが削除されないことです。これは、現在の行への変更がコミットされていないことを意味します。これは、メニュー項目コマンドが画面に表示されているものとは異なるデータに作用するため、ユーザーが驚くことを意味します。これが DataGrid のしくみであることがわかりました。しかし、私はまた、ユーザーがこれを理解することは決してできないことも認識しています.

では、どうすればこれを解決できますか?右クリック時に強制的にフォーカスを失わせることはできますか? または、DataGrid に使用できる特別なプロパティがありますか?

(私はこれを見つけました: WPF DataGrid CellEditEnding - DataSet Not Updating Till Row Lost Focusにより、DataGrid は行ごとではなくセルごとにコミットされますが、ユーザーはまだ一部を失う可能性があるため、問題は解決しません。データ (ただし、行全体ではなく 1 つのセルのみ))

4

1 に答える 1

3

LPL の提案を使用して、イベントハンドラーを作成しました。

 private void ViewUserControl_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {            
            // The purpose of this is to make sure that before the context menu on the outer datagrid is run, the row in the inner datagrid is committed (otherwise we might create orders with different quantities than what the user sees on the screen)
            Keyboard.ClearFocus();
        }

これで問題は解決しました。

于 2012-05-15T07:14:41.570 に答える