やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

ComboBoxの使い方

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プロパティ関連図 >

f:id:iyemon018:20151017202016p:plain

 こんなところでしょうか?

 

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>

 < 実行結果 >

f:id:iyemon018:20151017203631p:plain