C#多元组合框具有相同的itemssource

时间:2017-07-03 12:38:13

标签: c# wpf combobox

我有两个组合框,两者的项目是相同的。

List<string> cars = new List<string>();
cars.Add("Audi");
cars.Add("BMW");
cars.Add("Mercedes-Benz");

this.ComboBox1.ItemsSource = cars;
this.ComboBox2.ItemsSource = cars;

假设我在ComboBox1选择了“奥迪”。我想要的是在ComboBox1ComboBox2删除/禁用“奥迪”时选择“奥迪”。

有人可以帮助我吗? (我是c#/ wpf编程的新手)

3 个答案:

答案 0 :(得分:0)

循环通过第二个组合框项目并检查第二个组合框中是否存在第一个组合框中的选定项目,如果是,则将其删除,例如:

private void comboBox1Changed(object sender, SelectionChangedEventArgs e)
{
    for (int i = 0; i < comboBox2.Items.Count; i++)
    {
        if ((ComboBoxItem)comboBox2.Items[i] == comboBox1.SelectedItem)
        {
           comboBox2.Items.Remove((ComboBoxItem)comboBox2.Items[i]);
        }
    }
}

如果您想要在不将其从列表中删除的情况下禁用该项,则可以执行此操作,因为您的下拉列表中的ListItems具有Enabled属性。您可以将其设置为false以禁用它们。

答案 1 :(得分:0)

在公共场合定义2个列表,如

List<string> cars = new List<string>();
List<string> cars2 = new List<string>();

public CarsView()
    {
        InitializeComponent();

        cars.Add("Audi");
        cars.Add("BMW");
        cars.Add("Mercedes-Benz");

        this.ComboBox1.ItemsSource = cars;
        this.ComboBox2.ItemsSource = cars;
    }

,你的功能必须像这样

private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox2.SelectedIndex = -1;
            string cb1 = ComboBox1.SelectedValue as string;
            cars2.Clear();
            cars2.AddRange(cars);
            cars2.Remove(cb1);
            ComboBox2.ItemsSource = null;
            ComboBox2.ItemsSource = cars2;
        }

答案 2 :(得分:0)

    List<string> MasterListCars = new List<string>();
    List<string> TempListCars = new List<string>();
    public MainWindow()
    {
        InitializeComponent();
        MasterListCars.Add("Audi");
        MasterListCars.Add("BMW");
        MasterListCars.Add("Mercedes");
        Cb1.ItemsSource = MasterListCars;
    }

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        TempListCars = MasterListCars.Where(x => x != Cb1.SelectedItem.ToString()).ToList();
        cb2.ItemsSource = MasterListCars;
    }

这样您无需担心添加或删除项目。 如果你想在启动时填充combobox2添加到MainWindow():

cb2.ItemsSource = MasterLineCars;