| BeginEditCommand | F2 |
| CancelEditCommand | Esc |
| CommitEditCommand | Enter |
| DeleteCommand | Delete |
Deleteキーがおされた時にデフォルトのイベントハンドラが呼ばれる前に自前の処理を行う。
xaml
<DataGrid PreviewKeyDown="dataGrid_PreviewKeyDown">
</DataGrid>
コードビハインド
private void dataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
var dataGrid = (DataGrid)sender;
MessageBox.Show("DELETEキーが押されました");
e.Handled = true; //trueを設定するとデフォルト動作は行われない。
}
}
DataGridComboBoxでElementStyleやEditingElementStyleを指定し、かつIsSynchronizedWithCurrentItem=Trueを使うと同列の他の行の表示がみだれるのでやめたほうがよいっぽい。
<DataGridComboBoxColumn Width="*" Header="変数の型">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=Types}"/>
<!-- これ -->
<Setter Property="IsSynchronizedWithCurrentItem" Value="True"/>
<Setter Property="DisplayMemberPath" Value="Label"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="SelectedItem" Value="{Binding Type}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=Types}"/>
<!-- これ -->
<Setter Property="IsSynchronizedWithCurrentItem" Value="True"/>
<Setter Property="DisplayMemberPath" Value="Label"/>
<Setter Property="SelectedItem" Value="{Binding Type}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
DataGridColumnので設定する。以下の例ではValidatesOnDataErrorsがTrueなのでIDataErrorInfoを使って検証される。
<DataGridTextColumn Width="100" Header="名前" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
RowValidationRulesにValidationRuleを設定する。
<DataGrid.RowValidationRules> <local:RowDataInfoValidationRule ValidationStep="UpdatedValue"/> </DataGrid.RowValidationRules>