2010-05-04 59 views
7

如果我有一個具有SelectionChanged事件的組合框,它在我加載控件時觸發。XAML ComboBox SelectionChanged觸發OnDoad

所以在頁面加載時,我設置了SelectedValue和SelectionChanged事件,這不是我想要發生的事情。

什麼是公認的制止這種做法?這個

回答

12

兩個顯而易見的解決辦法是1)等到它包含了組合框的窗口/頁/用戶控件的Loaded事件和掛鉤的SelectionChanged那裏......例如,在構造函數中:

// set the inital selected index for the combo box here... 

this.Loaded += (s, args) => 
       { 
        cmbBox.SelectionChanged += 
          new SelectionChangedEventHandler(HandleChanged); 
       }; 

或2)檢查組合框已在選擇改變處理程序加載做任何事情之前,並返回,如果它沒有......例如,在處理程序:

if (!cmbBox.IsLoaded) 
     return; 

我寧願1號,因爲它不要求每次調用SelectionChanged處理程序時都要檢查。

+0

十分感謝爲 – griegs 2010-05-04 01:07:27

+1

由於這是非常有幫助... – KomalJariwala 2013-03-15 07:21:58

+0

在這裏我必須把你的第一個解決方案... – SANDEEP 2015-03-28 11:25:18

1

我面臨的一個特殊情況:

如果您使用的是支點,並過早點火控制在PivotItem> 0,您仍然有問題。

在這種情況下,似乎this.Loaded()僅引用PivotItem「0」,並且在UI中更改爲其他PivotItem將觸發事件。

在這種情況下,解決的辦法是(你的榜樣):

cmbBox.Loaded += (s, args) => 
      { 
       cmbBox.SelectionChanged += 
         new SelectionChangedEventHandler(HandleChanged); 
      };