- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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;
}