基本的にはhttps://teratail.com/questions/233982 のやり方。個人の備忘録
ポイント
- DataGridTemplateColumnとDataGridComboBoxColumn
前者はコンボボックスに限らずカスタマイズ性が高い。
コンボボックスを作成したときにワンクリックで切り替えができる。
後者はコンボボックス専用で独特。(未検証)
コンボボックス作成時に二回クリックしないと切り替えられない。 - DataGrid.AutoGenerateColumns
単にObservableCollection表示するだけなら自動で作成されるのでこれをTrueにすると早い
AutoGenerate字のコールバックを登録できて若干のカスタムはできるがよりいじりたい場合はFalseにする - Comboboxの初期を設定するために
EnumのComboBoxは初期値が設定できないようである。手動で選択して表示させることはできた。
DataGridのロード時のコールバックで全部のCellのSelectedIndexを設定した
SelectedIndexは「現在コンボボックスの何番目を選択しているか」が記録されるプロパティ
SelectedItemには「現在コンボボックスで選択されているVM」が入っていて、SelectedIndexを設定したらこのプロパティにも設定されているのを確認したが、SelectedIndexに値を設定してもそんな値ないといわれた- SelectedIndexとかSelectedItemとかSelectedValueとか
SelectedIndexは上記。SelectedItemはコントロールによくある、選択してるオブジェクトがそのまま入ってくるやつなので、Bindしたりすればいい - DataGridのDataTemplateとしてComboBoxを使用すると、ComboBoxにx:Nameで名前付けしてもコードビハインドから参照することはできない
http://gacken.com/wp/program/wpf/641/ の例のようにVisualTreeから取得するのが良い。公式にもVisualTreeから取得するサンプルはあるがこのサイトのほうが使えた
- SelectedIndexとかSelectedItemとかSelectedValueとか
WPF全般
- x:Nameでコントロールに名前を付けてコードビハインドから参照する際に、デバッグ中に書き換えてもそんな名前はないといわれる