&tag(WPF/DataGrid/編集);
*目次 [#o4bbbb59]
#contents
*参考情報 [#pdbc8e51]
-[[WPF]]
-[[WPF/DataGrid]]
*編集コマンド [#wc4bb535]

**キーボードによる編集 [#v0ab521e]
-[[Overview of the editing features in the WPF DataGrid - Vincent Sibal's Blog - Site Home - MSDN Blogs:http://blogs.msdn.com/b/vinsibal/archive/2008/10/01/overview-of-the-editing-features-in-the-wpf-datagrid.aspx]]によると次の編集コマンドが有効。
,BeginEditCommand,F2
,CancelEditCommand,Esc
,CommitEditCommand,Enter
,DeleteCommand,Delete

**編集コマンドのハンドリング方法 [#cdc414ff]
***参考リンク [#z06e3b62]
-[[Inserting, Updating, and Deleting from a WPF DataGrid:http://blogs.u2u.be/diederik/post/2009/09/29/Inserting-Updating-and-Deleting-from-a-WPF-DataGrid.aspx]]…編集コマンド実行時にYES/NOダイアログとかを表示する。
***基本 [#k7719458]
-DataGridで何も指定しないとDeleteキーによる削除が行われてしまう。これは単に画面・メモリ上の行を削除するだけ。
-ユーザーに削除前の確認を行ったり、関連する情報をまとめて削除したりする必要がある場合、デフォルトの削除処理ではなく、自前の削除処理を呼び出す必要がある。
-これを行うために、PreviewKeyDownイベントハンドラを使ったり、自前のInputBindingを使うことができる。(CommandManager.RegisterClassInputBinding()なども)

***PreviewKeyDownイベントハンドラを使う。 [#a203ca7b]
Deleteキーがおされた時にデフォルトのイベントハンドラが呼ばれる前に自前の処理を行う。

''xaml''
#pre{{
        <DataGrid PreviewKeyDown="dataGrid_PreviewKeyDown">
        </DataGrid>
}}
''コードビハインド''
#pre{{
        private void dataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Delete)
            {
                var dataGrid = (DataGrid)sender;
                MessageBox.Show("DELETEキーが押されました");
                e.Handled = true; //trueを設定するとデフォルト動作は行われない。
            }
        }
}}

*Tips [#p6fa2785]
**行を追加可能にする [#x132c23b]
-ItemsSourceバインドしているオブジェクトに引数なしのコンストラクタが必要。
-IsReadOnly="False", CanUserAddRows="True" にする。


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS