ComboBox SelectionChanged事件意外触发

时间:2009-12-24 02:59:43

标签: c# silverlight silverlight-3.0 combobox

我有4个水平排列的ComboBox: 标题仅供参考。

[平台] [发布] [发布项目] [发布项目产品]

我的框的UI模型如下:

  1. 首先禁用所有四个ComboBox(IsEnabled = false)
  2. 当页面加载时,异步回调获取平台数据并在启用后将其绑定到平台组合框,并手动将“全部”添加为项目。
  3. 用户选择一个平台

  4. 如果用户选择“全部”,我会执行以下操作:禁用其他三个组合框 并调用Async方法将数据重新绑定到平台组合框。

            releasesFilterComboBox.IsEnabled = false;
            releaseItemsFilterComboBox.IsEnabled = false;
            releaseItemProductsFilterComboBox.IsEnabled = false;
    
            mainClient.GetBuildsAsync(null);
    

  5. 如果用户选择其他平台(“全部”除外),根据选择的平台,我会收集与该平台相匹配的所有项目。 DataContext,并将Releases组合框的ItemsSource设置为如下:

  6. 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();
    
    1. 其余的ComboBoxes遵循完全相同的过程来绑定数据和触发器 并且在触发SelectionChanged事件时调用的方法中执行操作。
    2. 等等 - &gt;其他方面也一样。

      我的问题是:在我填充了至少前两个ComboBoxes后,当我选择

      在预期的行为(其他组合框被禁用)之后,PREVIOUS ComboBox上的'All'选项,当我选择“ALL”以外的选项时,为之前填充的每个COMBOBOX触发SelectionChanged事件! (所有被禁用的)。 ###

      只是澄清,如果还没有。

      我选择了一个平台,因此填充了版本。然后我选择了一个版本,因此填充了发布项目。现在,当我在平台组合框中选择“全部”时,将禁用“释放和释放项”框。然后,当我选择“ALL”以外的平台时,SelectionChanged事件不仅针对平台,而且针对Releases和ReleaseItems触发。 我在事件处理程序的第二部分中对组合框进行的唯一更改是像上面显示的代码一样设置项目源。没什么。

      为什么要为其他组合框触发SelectionChanged事件? 这是SL组合框中的已知错误吗?我可以防止这种情况发生吗?

      如果问题和解释不是很清楚,我很抱歉。如果你问我,我会尽力澄清。

      非常感谢!

1 个答案:

答案 0 :(得分:1)

这一切都归结为重新填充名单。解决这个问题的一种方法是在选择“ALL”时删除事件处理程序并禁用其他组合框。然后,如果选择“ALL”以外的其他内容,则可以设置数据源,然后重新添加选择更改事件处理程序。

另一种方法是将它们全部留在那里然后在“ALL”选择中将所选索引设置为-1(默认值),并且在事件处理程序中如果它为-1则不执行任何操作。

只是一个想法。