我在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(荷兰语)中更改标题并按下表单上的按钮时,将获取并提交旧值。当我更改其他两个组合框中的一个时,不会发生这种情况。此外,当我更改另外两个的值时,更改荷兰语的一个并按下按钮,提交另一个的最后一个选定值。
模拟:
null
- &gt;选择荷兰语第一项并提交:
null
已提交。null
- &gt;选择法国第三项 - &gt;选择荷兰语第二项并提交:第二项已提交。null
- &gt;选择第三荷兰项目 - &gt;选择荷兰语第五项并提交:null
已提交有没有人知道可能导致这种情况的原因以及如何解决这个问题?