【发布时间】:2017-11-28 14:10:43
【问题描述】:
我有一个ComboBox,其中包含第 3 级选择(父类别 > 子类别 > 品牌)。当两个更高级别的类别中的任何一个发生更改时,品牌选择的DataSource 应刷新,并重置选择。
现在这对于子类别选择非常有效,但不适用于父类别选择,尽管使用几乎相同的语法。
我当然可以使用cboBrand.Text = string.Empty 进行快速修复,但问题是,品牌组合框仍然拥有与以前相同数量的插槽,只是空的。 IE。如果在更改父类别之前有 3 个品牌选项,则下拉列表中将有 3 个空位。我查了一下,viewModel.BrandOptions 的Count() 为零,所以这不是问题。
有人知道我做错了什么吗?
父类别已更改(不起作用)
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;
}
更新
设置cboBrand.DataSource = null 将使其清除组合框。但它不修复下拉列表中的多个空白行。我还检查了(在将数据源更改为 null 之前)数据源中是否有任何对象。正如您在图片中看到的那样,情况并非如此。
【问题讨论】:
-
在它不起作用的情况下,当你在调试器中查看
viewModel.BrandOptions时,你在那个集合中看到了什么? -
BrandOptions 集合中没有任何内容。下拉列表中也没有任何内容,预计 X 个空白行。
-
如果您将一个空集合分配给 cboBrand.DataSource,您应该期望 cboBrand 中没有任何内容。看来您的问题是
viewModel.BrandOptions应该以某种方式填充,在某个地方,在您没有向我们展示的代码中 - 但这没有发生。或者可能,它正在发生,而您正在立即清除它。 -
@EdPlunkett 当我更改父类别时,子类别将设置为默认对象,没有相关品牌。因此,我希望 BrandOptions 为空,并且确实如此。我没有得到的是:1)为什么下拉列表中仍然有 X 个空行和 2)为什么它不会清除选择。
-
那不是代码。它是对您假设代码正在做什么的描述,抽象程度如此之高,即使正确,它也不会告诉我任何信息。我无法调试它或使用它来重现问题。因为您看到了您不理解的意外行为,所以您的代码不太可能按照您的想法执行。祝你的问题好运。帮助when there's an MVCE更容易。