Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

Wpf DataGridからDataGridRow取得でnullが返る件

f:id:devew:20191227115831j:plain 初登板ホリノウチです。

WPFでDataGridからDataGridRowの取得にはContainerFromIndexやContainerFromItemがあります。 (環境: Windows7, .net framework4, C#, wpf)

DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);

とか

DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);

など

ただ、このメソッドたち頻繁にnullを返します。 そんな時はUpdateLayoutとScrollIntoViewです。

grid.UpdateLayout();
grid.ScrollIntoView(grid.Items[index]);
DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);

とか

grid.UpdateLayout();
grid.ScrollIntoView(grid.SelectedItem);
DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem);

など

この二つを先に呼んでおくと、DataGridRowが返ってくるはず。 仮想ビューとか使っていると無理かもしれませんが。。。

最近、nullチェックをしない強気な方が増えています。 nullチェックをしましょう。