ジェネリックにしたい場合は、使用するだけです{Binding}
例:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="130" Width="167" Name="UI" >
<Grid >
<ComboBox ItemsSource="{Binding ElementName=UI, Path=Items}" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid Background="AliceBlue">
<TextBlock Text="{Binding}" Foreground="Lime"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
</Window>
コード:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Items.Add("Stack");
Items.Add("Overflow");
}
private ObservableCollection<string> _items = new ObservableCollection<string>();
public ObservableCollection<string> Items
{
get { return _items; }
set { _items = value; }
}
}
結果:
カスタムオブジェクトを使用している場合は、ToString
メソッドをオーバーライドして、コンボボックスに必要なものを表示できます
例
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Items.Add(new CustomObject { Name = "Stack" });
Items.Add(new CustomObject { Name = "Overflow" });
}
private ObservableCollection<CustomObject> _items = new ObservableCollection<CustomObject>();
public ObservableCollection<CustomObject> Items
{
get { return _items; }
set { _items = value; }
}
}
public class CustomObject
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
Xaml:
同上
結果: