トップ 一覧 ping 検索 ヘルプ RSS ログイン

Datagrid の RowEditEnding イベントでは ItemSource に変更が反映されない対応の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Datagrid の RowEditEnding イベントでは ItemSource に変更が反映されない対応
[WPF]

*http://codefluff.blogspot.de/2010/05/commiting-bound-cell-changes.html

*反映されていてほしいところだが、反映されていないので、反映させる。

!ItemSourceを設定
 ObservableCollection<Hoge> hogeList;
           :
      hogeList の生成
           :
 this.datagrid.ItemsSource = hogeList;

!強制的に反映
 private bool isManualEditCommit;
 private bool isRowCommited;
 private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
 {
     if (!isManualEditCommit)
     {
         isManualEditCommit = true;
         DataGrid grid = (DataGrid)sender;
         grid.CommitEdit(DataGridEditingUnit.Row, true);
         isRowCommited = true;
         isManualEditCommit = false;
     }
     // データグリッドでの変更が反映されている
     // 上記ブロックがないとこのタイミングでは反映されていない
     var item = e.Row.Item as Hoge;
     Console.WriteLine(item.ToString());  // <- 反映済み
     if (isRowCommited) {
         // データグリッドでの変更が反映されている
         // 上記ブロックがないとこのタイミングでは反映されていない
         var item = e.Row.Item as Hoge;
         Console.WriteLine(item.ToString());  // <- 反映済み
     }
     isRowCommited = false;
 }