我有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之前)。情况并非如此,正如您在图片中看到的那样。
答案 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正试图刷新其数据