binding combobox to another combobox in wpf binding combobox to another combobox in wpf wpf wpf

binding combobox to another combobox in wpf


    <Grid>    <Grid.RowDefinitions>        <RowDefinition Height="50"/>        <RowDefinition Height="50"/>    </Grid.RowDefinitions>    <ComboBox Height="23" ItemsSource="{Binding Cars}" DisplayMemberPath="Name" HorizontalAlignment="Left" Margin="244,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"/>    <ComboBox Height="23" Grid.Row="1" ItemsSource="{Binding SelectedItem.Series, ElementName=comboBox1}" HorizontalAlignment="Left" Margin="244,10,0,0" Name="comboBox2" VerticalAlignment="Top" Width="120"/></Grid>    public partial class MainWindow : Window{    public MainWindow()    {        InitializeComponent();        Cars = new ObservableCollection<Car>();        Cars.Add(new Car() { Name = "Peugeut", Series = new ObservableCollection<string>() { "106", "206", "306" } });        Cars.Add(new Car() { Name = "Ford", Series = new ObservableCollection<string>() { "406", "506", "606" } });        Cars.Add(new Car() { Name = "BMW", Series = new ObservableCollection<string>() { "706", "806", "906" } });        DataContext = this;    }    public ObservableCollection<Car> Cars { get; set; }}public class Car{    public string Name { get; set; }    public ObservableCollection<string> Series { get; set; }}

I hope this will help.


Unless you look up the data I don't think you can do it with just XAML. If, however, you created a class to bind your combo boxes you could have a class with something like:

public class CarMake{    public string Make {get; set;}    public List<string> Models {get; set;}}

Then in your first combo box, just bind to an instance of List with the info populated, then bind the second combo box like:

<ComboBox ItemsSource="{Binding ElementName=FirstComboBox, Path=SelectedItem.Models}" ></ComboBox>

That should get you going...


Try to add the items in box2 programmtically when ComboBox1 item is selected by user.

        if (combobox1.SelectedText == "Peurgeut")        {            box2.Items.Add("106");            box2.Items.Add("206");            box2.Items.Add("306");        }