Clear ComboBox有时只能工作

时间:2017-11-28 14:10:43

标签: c# .net winforms combobox

我有ComboBox,其中包含第3级选择(父级类别> 子类别> 品牌)。如果更改了两个更高级别类别中的任何一个,则应刷新品牌选择的DataSource,并重置选择。

现在这对于子类别选择非常有效,但对于父类别选择却不行,尽管使用了几乎相同的语法。

我当然可以使用cboBrand.Text = string.Empty进行快速修复,但问题是,品牌组合框仍然保持与之前相同数量的广告位,只是空的。即如果在更改父类别之前有3个品牌选项,则下拉列表中将有3个空插槽。我已经检查过,Count()的{​​{1}}为零,所以这不是问题。

有没有人有任何想法,我做错了什么?

更改了父类别(不起作用)

viewModel.BrandOptions

子类别已更改(此工作正常)

private void cboCategory_SelectionChangeCommitted(object sender, EventArgs e)
{
    viewModel.Category = (CategoryModel)cboCategory.SelectedItem;

    // Update sub-category data source
    cboSubCategory.DataSource = viewModel.SubCategoryOptions;

    // Update Brand data source and reset selection
    cboBrand.DataSource = viewModel.BrandOptions;
    cboBrand.SelectedIndex = -1;

}

更新

设置private void cboSubCategory_SelectionChangeCommitted(object sender, EventArgs e) { if (cboCategory.SelectedItem != null) viewModel.SubCategory = (CategoryModel)cboSubCategory.SelectedItem; // Update Brand data source and reset selection cboBrand.DataSource = viewModel.BrandOptions; cboBrand.SelectedIndex = -1; } 会清除组合框。但它没有修复下拉列表中的多个空白行。如果数据源中有任何对象,我还检查了(在将数据源更改为null之前)。情况并非如此,正如您在图片中看到的那样。

enter image description here

1 个答案:

答案 0 :(得分:0)

你有没有尝试过:

private void cboCategory_SelectionChangeCommitted(object sender, EventArgs e)
{
    viewModel.Category = (CategoryModel)cboCategory.SelectedItem;

    // Update sub-category data source
    cboSubCategory.DataSource = viewModel.SubCategoryOptions;
    cboSubCategory.SelectedIndex = -1; // << new line to blank out SubCat

    // Update Brand data source and reset selection
    cboBrand.DataSource = viewModel.BrandOptions;
    cboBrand.SelectedIndex = -1;

}

...我感觉到正在发生的事情是你在两个连续的行中刷新两个数据源,并且这是一个时间问题 - 在cboSubCategory具有正确的值之前,cboBrand正试图刷新其数据