WPFを知らない人からComboBoxの使い方が分からない、とよく言われます。
WindowsFormからやってきた人にとってはComboBoxは序盤のハードルとなるのでは無いでしょうか?
かくいう私もそうでした。
しかし、毎度毎度口頭で説明したりサンプルを作るのも面倒なので、簡単な関連図を作成しました。
ComboBoxと言っていますが、実際ItemsControlを継承したコントロールは同じ概念なのでDataGridやListBoxにも流用できると思います。
まずは、ComboBoxのプロパティのうち重要なものを挙げていきます。
プロパティ名 | 説明 |
---|---|
ItemsSource | 選択可能なデータのコレクションをバインドするためのプロパティ 基本的にObservableCollection |
SelectedItem | ItemsSource のうち、現在選択されているデータ |
SelectedValue | ItemsSource のうち、現在選択されているデータの値 |
SelectedValuePath | SelectedValue にバインドするプロパティ名。 ItemsSource にバインドしたコレクション単体の型のプロパティ名でなければならない。 |
DisplayMemberPath | 表示するデータの名称 ItemsSource にバインドしたコレクション単体の型のプロパティ名でなければならない。 |
ItemsSourceに表示したいデータのコレクションをバインドし、
SelectedItemに選択項目をバインドするのが基本的な使い方でしょう。
関連図では、例として、スタッフの情報を持ったStaffクラスを作成し、
そのコレクションをComboBoxに表示するという想定で作成しています。
< ComboBoxプロパティ関連図 >
こんなところでしょうか?
DisplayMemberPathには単体のデータ名のみ設定できます。
複数のデータを表示、例えば"ID : 名前"のように表現する場合は、ItemTemplateを使ってDataTemplateを設定しましょう。
< XAML >
<ComboBox VerticalAlignment="Top" ItemsSource="{Binding StaffList, Mode=OneWay}" SelectedValue="{Binding SelectedId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Id"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock><Run Text="{Binding Id, Mode=OneWay}" /><Run Text=":" /><Run Text="{Binding Name, Mode=OneWay}" /> </TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
< 実行結果 >