XAML ComboBox SelectionChanged触发OnLoad

时间:2010-05-04 00:17:23

标签: xaml selectionchanged

如果我有一个具有SelectionChanged事件的ComboBox,它会在我加载控件时触发。

所以在页面加载时我设置了SelectedValue和SelectionChanged事件,这不是我想要发生的事情。

停止使用该公约的接受程度是什么?

2 个答案:

答案 0 :(得分:14)

两个明显的解决方案是1)等待Window / Page / UserControl的Loaded事件,其中包含ComboBox并在那里挂起SelectionChanged ......例如在构造函数中:

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

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

或2)在执行任何操作之前检查ComboBox是否已在选择更改的处理程序中加载,如果没有,则返回...例如在处理程序中:

if (!cmbBox.IsLoaded)
        return;

我更喜欢数字1,因为每次激活SelectionChanged处理程序时都不需要检查。

答案 1 :(得分:1)

我遇到了一个特殊的情况:

如果您正在使用枢轴,并且PivotItem中的过早触发控制> 0,你仍然会遇到问题。

在这种情况下,似乎this.Loaded()仅引用PivotItem" 0",并且在UI中更改为其他PivotItem将会触发事件。

在这种情况下,解决方案是(以你的例子):

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