Combobox は ItemsControl です。すべての ItemsControls は、項目またはコンテナーで「ハードコーディング」することができます。
これにより、コンボボックスに新しいエントリが追加され、文字列が ComboBoxItem である ItemsContainer にラップされます。
<ComboBox>
<sys:string>Hello</string>
<ComboBox>
ここでは、コンボボックス項目を直接作成し、その内容を値「Hello」の文字列に追加します。
<ComboBox>
<ComboBoxItem Content="Hello"/>
<ComboBox>
どちらも視覚的には同じに見えます。最初のケースでは、ComboBox が ComboBox の未知の型の文字列を ComboBoxItem にラップし、デフォルトの DataTemplate を使用して表示することを理解することが重要です。デフォルトの DataTemplate は TextBlock を表示し、指定されたデータ項目で ToString() を呼び出します。
動的データを取得するには、データ項目を含む ObservableCollection が必要です。
class Employee
{
public BitmapSource Picture {get;set;}
public string Name{get;set}
}
ObservableCollection<Employee> employees;
myComboBox.ItemsSource = employees;
多くのデータ項目を保持する観測可能なコレクションである Employee という DataClass があり、このコレクションを ItemsSource として設定します。この時点から、コンボボックスはこのコレクションへの変更をリッスンします。従業員の追加と削除と同様に、新しい従業員を ComboBoxItem に自動的にラップします。すべてが自動的に行われます。必要なのは、適切な DataTemplate を提供することだけです。コンボボックスは、従業員を「表示」する方法を認識していません。まさにそれが DataTemplate の目的です。
<DataTemplate x:Key="employeeTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Picture}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
従業員は ComboBoxItem にラップされており、ComboBoxItem は提供された Datatemplate を使用してそのデータを表示します。つまり、DataTemplate 内で Binding を使用してデータ項目のすべてのプロパティにアクセスできます。
お役に立てば幸いです。