三个组合框中的第一个在按钮点击上取旧值

时间:2013-11-28 11:25:41

标签: c# winforms combobox selecteditem

设定:

我在Windows窗体上有树组合框,它们都具有完全相同的属性集。它们有一个单独的BindingSource,这些源从DataContext获取它们的项目。它们都有相同的项目,只能用另一种语言显示。以下是设置的一些示例代码:

var allTitles = dbContext.GetTitles();

bindingSourceNL = allTitles.OrderBy(t => t.TitleNL);
DucthBox.DataSource = bindingSourceNL;
//This goes the same for the FR and DE comboboxes
//They have THE SAME set of data, only a different display property

从任何组合框中选择项目时,其他两个必须获得相应的标题。每个ComboBox都有其SelectedIndexChanged事件,并调用相同的方法,其中设置了其他两个中的相应标题:

public void SetCbValues(object selectedItem)
{
    if (!suspend)
    {
        suspend = true;

        //In real code there's a null-check
        var selectedTitle = (Title)selectedItem;
        DutchBox.SelectedIndex = DutchBox.FindStringExact(selectedTitle.TitleNL);
        FrenchBox.SelectedIndex = FrenchBox.FindStringExact(selectedTitle.TitleFR);
        GermanBox.SelectedIndex = GermanBox.FindStringExact(selectedTitle.TitleDE);

        suspend = false;
    }
}

绑定事件处理程序:

事件的绑定是这样完成的:

DutchBox.SelectedIndexChanged += DutchBox_SelectedIndexChanged;
//Same goes for the other two

取消订阅的方式如下:

DutchBox.SelectedIndexChanged -= DutchBox_SelectedIndexChanged;
//Same goes for the other two

样本数据:

这只是我使用的可表示数据的模拟:

var titles = new List<Title>
{
    new Title
    {
        TitleNL = "1 - Medewerker",
        TitleFR = "1 - Employé",
        TitleDE = "1 - Mitarbeiter"
    },
    new Title
    {
        TitleNL = "2 - Arbeider",
        TitleFR = "2 - Travailleur",
        TitleDE = "2 - Arbeiter"
    },
    new Title
    {
        TitleNL = "3 - Bediende",
        TitleFR = "3 - Greffier",
        TitleDE = "3 - Schreiber"
    },
}

此列表绑定到每个ComboBox,并根据哪个,显示正确的语言。

问题:

当我在de first ComboBox(荷兰语)中更改标题并按下表单上的按钮时,将获取并提交旧值。当我更改其他两个组合框中的一个时,不会发生这种情况。此外,当我更改另外两个的值时,更改荷兰语的一个并按下按钮,提交另一个的最后一个选定值。

模拟:

  • 在加载时,selecteditem为null - &gt;选择荷兰语第一项并提交: null已提交。
  • 在加载时,selecteditem为null - &gt;选择法国第三项 - &gt;选择荷兰语第二项并提交:第二项已提交。
  • 在加载时,selecteditem为null - &gt;选择第三荷兰项目 - &gt;选择荷兰语第五项并提交:null已提交

有没有人知道可能导致这种情况的原因以及如何解决这个问题?

0 个答案:

没有答案