簡體   English   中英

ComboBox SelectionChanged事件意外觸發

[英]ComboBox SelectionChanged event firing off unexpectedly

我有4個水平組合的組合框:標題僅供參考。

[平台] [發布] [發布項目] [發布項目產品]

我的盒子的UI模型如下:

  1. 首先,所有四個組合框都被禁用(IsEnabled = false)
  2. 頁面加載后,異步回調將獲取Platforms數據並將其啟用后綁定到Platforms comboBox,並手動將“ All”添加為項目。
  3. 用戶選擇平台

  4. 如果用戶選擇“全部”,則執行以下操作:禁用其他三個組合框,並調用Async方法將數據重新綁定到平台組合框。

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

  5. 如果用戶選擇其他平台(不是“ All”),則基於所選平台,我將從DataContext中的對象收集與該平台匹配的所有項目,並將Releases組合框的ItemsSource設置為如下:

 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. 其余的ComboBox遵循完全相同的過程來綁定數據,並且觸發器和操作是在激發SelectionChanged事件時調用的方法中執行的。

等等,等等->對於其余的盒子都是一樣的。

我的問題是:當我至少選擇了前兩個組合框后,

上一個組合框上的“全部”選項,在預期的行為(其他組合框被禁用)之后,當我選擇“全部”以外的選項時,將為以前填充的每個COMBOBOX觸發SelectionChanged事件! (所有已禁用)。 ###

請澄清一下,如果還沒有。

我選擇了一個平台,因此發布了“發行版”。 然后,我選擇了發布,因此填充了發布項目。 現在,當我在“平台”組合框中選擇“全部”時,“發布”和“發布項目”框將被禁用。 然后,當我選擇除“ ALL”以外的平台時,不僅會針對平台,還會針對Releases和ReleaseItems觸發SelectionChanged事件。 我對事件處理程序第二部分中的組合框所做的唯一更改是設置項目源,如上面的代碼所示。 而已。

為什么會為其他comboBox觸發SelectionChanged事件? 這是SL組合框中的已知錯誤嗎? 我可以防止這種情況發生嗎?

如果問題和解釋不清楚,我感到很抱歉。 如果您問我,我會盡力澄清。

非常感謝!

全部歸結為列表的重新填充。 解決此問題的一種方法是,當您選擇“全部”並禁用其他組合框時,刪除事件處理程序。 然后,如果選擇“ ALL”以外的任何內容,則可以設置數據源,然后重新添加選擇更改事件處理程序。

另一種方法是將它們全部保留在那里,然后在“ ALL”選擇中將所選索引設置為-1(默認值),並且在事件處理程序中,如果其值為-1,則不執行任何操作。

只是一個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM