根据另一个组合框值更改组合框值?

时间:2017-01-30 08:53:56

标签: c# wpf data-binding combobox

我是关于C#和WPF项目的新手。所以这是我的问题。

我有2个Combobox充满了字符串列表。

  

根据我的第一个组合框的价值,我想改变   第二个组合框中提供的列表。

这是我的代码:

public partial class MainWindow : Window
{
    //creation de listes
    List<string> themesE17 = new List<string>();
    List<string> themesH17 = new List<string>();
    List<string> themesE16 = new List<string>();
    List<string> themesH16 = new List<string>();



    public MainWindow()
    {
        InitializeComponent();

        initLists();

        string value = comboSaison.Text;
        Console.WriteLine("The value of season combobox " + value);

    }

    public void initLists()
    {
        //saison 2017
        themesE17.Add("Ete 17 Theme1");
        themesE17.Add("Ete 17 Theme2");

        themesH17.Add("Hiver 17 Theme1");
        themesH17.Add("Hiver 17 Theme2");

        //saison 2016
        themesE16.Add("Ete 16 Theme1");
        themesE16.Add("Ete 16 Theme2");

        themesH16.Add("Hiver 16 Theme1");
        themesH16.Add("Hiver 16 Theme2");
    }

    private void comboSaison_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (comboSaison.Text == "Ete 2017")
        {
            comboTheme.ItemsSource = themesE17;
            Console.WriteLine("1st if E17");
        }

        else if (comboSaison.Text == "Hiver 2017")
        {
            comboTheme.ItemsSource = themesH17;
            Console.WriteLine("2nd if H17");
        }

        else if (comboSaison.Text == "Ete 2016")
        {
            comboTheme.ItemsSource = themesE16;
            Console.WriteLine("3rd if E16");
        }

        else if (comboSaison.Text == "Hiver 2016")
        {
            comboTheme.ItemsSource = themesH16;
            Console.WriteLine("4th if H16");
        } else

            Console.WriteLine("Error in selection !");
    }
}

但是它不起作用,我的Console.WriteLine告诉我,当我在第一个组合框中选择我的值时,如果是随机的情况,程序会全部进入。

帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:4)

ComboBox有项目。所以只需找到所选的及其标题。

private void comboSaison_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var obj = (ComboBox)sender;
        var ind = obj.SelectedIndex;
        var selectedItem = (ComboBoxItem)obj.Items[ind];
        switch ((string)selectedItem.Content)
        {
            case "Ete 2017":
                comboTheme.Items.Clear();
                foreach (var item in themesE17)
                    comboTheme.Items.Add(new ComboBoxItem() { Content = item });
                break;
            case "Hiver 2017":
                comboTheme.Items.Clear();
                foreach (var item in themesH17)
                    comboTheme.Items.Add(new ComboBoxItem() { Content = item });
                break;
            case "Ete 2016":
                comboTheme.Items.Clear();
                foreach (var item in themesE16)
                    comboTheme.Items.Add(new ComboBoxItem() { Content = item });
                break;
            case "Hiver 2016":
                comboTheme.Items.Clear();
                foreach (var item in themesH16)
                    comboTheme.Items.Add(new ComboBoxItem() { Content = item });
                break;
            default:
                break;
        }
}

还可以更好地将开关(文本)更改为切换(索引),以防止单词中的大小写不匹配和错误类型。
附:对不起我的英语
注意:这适用于WPF,而不适用于WinForm解决方案

答案 1 :(得分:0)

只需按List<string>

更改所有ObservableCollection<string>即可