我有4个水平排列的ComboBox: 标题仅供参考。
[平台] [发布] [发布项目] [发布项目产品]
我的框的UI模型如下:
用户选择一个平台
releasesFilterComboBox.IsEnabled = false;
releaseItemsFilterComboBox.IsEnabled = false;
releaseItemProductsFilterComboBox.IsEnabled = false;
mainClient.GetBuildsAsync(null);
BuildsListBox.ItemsSource = platformSelectedBI = from bi in buildInfos where bi.GetBuildsResult.ReleasePlatform == selectedPlatform select bi; releasesFilterComboBox.IsEnabled = true;
List<String> releaseNumbers = ( from bld in buildInfos.Where(bi => bi.GetBuildsResult.ReleasePlatform == selectedPlatform)
select bld.GetBuildsResult.ReleaseNumber ).ToList();
releaseNumbers.Insert(0, "All");
releasesFilterComboBox.ItemsSource = releaseNumbers.Distinct();
等等 - &gt;其他方面也一样。
只是澄清,如果还没有。
我选择了一个平台,因此填充了版本。然后我选择了一个版本,因此填充了发布项目。现在,当我在平台组合框中选择“全部”时,将禁用“释放和释放项”框。然后,当我选择“ALL”以外的平台时,SelectionChanged事件不仅针对平台,而且针对Releases和ReleaseItems触发。 我在事件处理程序的第二部分中对组合框进行的唯一更改是像上面显示的代码一样设置项目源。没什么。
为什么要为其他组合框触发SelectionChanged事件? 这是SL组合框中的已知错误吗?我可以防止这种情况发生吗?
如果问题和解释不是很清楚,我很抱歉。如果你问我,我会尽力澄清。
非常感谢!
答案 0 :(得分:1)
这一切都归结为重新填充名单。解决这个问题的一种方法是在选择“ALL”时删除事件处理程序并禁用其他组合框。然后,如果选择“ALL”以外的其他内容,则可以设置数据源,然后重新添加选择更改事件处理程序。
另一种方法是将它们全部留在那里然后在“ALL”选择中将所选索引设置为-1(默认值),并且在事件处理程序中如果它为-1则不执行任何操作。
只是一个想法。