2010-05-04 50 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); 
      }; 
相关问题