C#
public class first
{
public string imie{get; set;}
public string nazwisko{get; set;}
}
public class second
{
public int nr_konta{get; set;}
public int id_klienta{get; set;}
}
public partial class test : Window
{
private ObservableCollection<first> first_lista;
private ObservableCollection<second> second_lista;
public test()
{
first_lista = new ObservableCollection<first> { new first { imie = "jan", nazwisko = "kowalski" } };
second_lista = new ObservableCollection<second> { new second { nr_konta = 1, id_klienta = 166 } };
InitializeComponent();
this.DataContext = this;
int wybor = 0;
if (wybor == 0)
{
combobox.ItemsSource = first_lista;
combobox.ItemTemplate = combobox.Resources["temp_first"] as DataTemplate;
}
else if(wybor == 1)
{
combobox.ItemsSource = second_lista;
combobox.ItemTemplate = (drugi szablon zdefiniowany)
}
}
}
WPF
<ComboBox Name="combobox">
<ComboBox.Resources>
<DataTemplate x:Key="temp_first">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding imie, StringFormat=Imie: {0} }"/>
<TextBlock Margin="5,0,0,0" Text="{Binding nazwisko, StringFormat=Nazwisko: {0}}"/>
</StackPanel>
</DataTemplate>
</ComboBox.Resources>
</ComboBox>
Wystarczy utworzyć kolejne szablony danych, pierwszy zrobiłem dla przykładu odnosiłby się do listy first_lista.
Edit w samym kodzie xaml, bez sprawdzania w kodzie behind wartości wyboru.
<ComboBox Name="combobox">
<ComboBox.Resources>
<DataTemplate x:Key="temp_first">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding imie, StringFormat=Imie: {0} }"/>
<TextBlock Margin="5,0,0,0" Text="{Binding nazwisko, StringFormat=Nazwisko: {0}}"/>
</StackPanel>
</DataTemplate>
</ComboBox.Resources>
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding wybor}" Value="0">
<Setter Property="ItemTemplate" Value="{StaticResource temp_first}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>