WPF DataGrid PreviewLostKeyboardFocus

索引サイトへ
データグリッド編集・入力

リストには ObservableCollection を使用して INotifyPropertyChanged で通知する。
参考:http://www.moonmile.net/blog/archives/324
ところが入力値取得のタイミングが問題で、SelectionChanged だとインデックスが変更後の数値になる。PreviewKeyDown だと Enterキー入力時点でコレクションに入力値が格納されていない。う〜ん・・てなもんで PreviewLostkeyboardFocus を使用。結果判断でOK・・でしょう。

グリッド項目の数値表示 : 位置はスタイルを定義して ElementStyle にて。書式はバインド内の StringFormat に直接放り込めば良いらしい。




<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="ID" Binding="{Binding code}" ElementStyle="{StaticResource xCenter}"/>
<DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding name}"/>
<DataGridTextColumn IsReadOnly="False" Header="日数" Binding="{Binding nissuu}" ElementStyle="{StaticResource xCenter}"/>
<DataGridTextColumn IsReadOnly="True" Header="単価" Binding="{Binding tanka,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="False" Header="基本" Binding="{Binding kihon,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="True" Header="固定(in)" Binding="{Binding inFix,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="False" Header="変動(in)" Binding="{Binding inVal,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="True" Header="固定(out)" Binding="{Binding outFix,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="False" Header="変動(out)" Binding="{Binding outVal,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
<DataGridTextColumn IsReadOnly="True" Header="合計" Binding="{Binding total,StringFormat=N0}" ElementStyle="{StaticResource xRight}"/>
</DataGrid.Columns>



AX