| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

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

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

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

WPF |

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

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;
    }
    if (isRowCommited) {
        // データグリッドでの変更が反映されている
        // 上記ブロックがないとこのタイミングでは反映されていない
        var item = e.Row.Item as Hoge;
        Console.WriteLine(item.ToString());  // <- 反映済み
    }
    isRowCommited = false;
}