一覧表示するときに非常に便利なDataGridというコントロールがあります。
編集モードで表示内容を直接編集できたり便利なコントロールですが、
直接入力ではなくコンボボックス形式で入力したいなんてこともあるかと思います。
今回はDataGridにコンボボックスを設定する方法を記します。
やり方.
今回は「DataGridTemplateColumn」を使用して実装します。
かなりネストは深くなりますが、非常にシンプルに実装することが可能です。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
コード例.
<DataGridTemplateColumn Header=”優先度”>
<DataGridtemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
ItemsSource=”{
Binding RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={
x:Type DataGrid
}
}, Path=DataContext.dicPrimary
}”
DisplayMemberPath=”Value”
SelectedValuePath=”Key”
SelectedValue=”{Binding Path=TaskPrimary}” />
</DataTemplate>
</DataGridtemplateColumn.CellTemplate>
</DataGridTemplateColumn>
類似の実装方法(紹介のみ).
例コード以外にも、「DataGridComboBoxColumn」というものがあります。
しかし、DataGrid専用コントロールですが使いづらいため、GridTemplateで通常のコンボボックスを使用するほうが使いやすく新たな知識も不要でハードルが低いです。
そのため、GridTemplateとComboBoxを組み合わせて使うことが一般的です。