簡単な方法は、coboboxitem 情報をラッパー内に保持し、これらのラッパーのコレクションをコンボボックスの itemssource として配置することです。
public class MyComboboxData
{
public string MyImagePath { get; set; }
public string MyText { get; set; }
}
コードビハインドで:
public ObservableCollection<MyComboboxData> MyData { get; private set; }
public MyViewWithCombobox()
{
InitializeComponent();
this.MyData = new ObservableCollection<MyComboboxData>()
{
new MyComboboxData(){MyImagePath = "ImagePath/Image.bmp", MyText = "MyTextString"},
new MyComboboxData(){MyImagePath = "ImagePath/Image2.bmp", MyText = "MyTextString2"}
};
this.DataContext = this;
}
これで、必要なものすべてに簡単にバインドできます。
<Grid>
<ComboBox Name="comboBox1" ItemsSource="{Binding MyData}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImagePath}"/>
<TextBlock Text="{Binding MyText}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Text="{Binding ElementName=comboBox1, Path=SelectedItem.MyText}"/>
</Grid>
ps: viewmodel を使用して MVVM を見てみましょう。これらのタスクをバインドするのは非常に簡単です。