9

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

因此,在页面加载时,我设置了 SelectedValue 并触发了 SelectionChanged 事件,这不是我想要发生的。

阻止这种情况的公认方法是什么?

4

2 回答 2

18

两个明显的解决方案是 1)等到包含 ComboBox 的 Window/Page/UserControl 的 Loaded 事件并在那里连接 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 处理程序时进行检查。

于 2010-05-04T00:40:54.677 回答
1

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

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

在这种情况下,似乎 this.Loaded() 仅指 PivotItem“0”,并且在 UI 中更改为其他 PivotItem 无论如何都会触发事件。

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

cmbBox.Loaded += (s, args) =>
           {
                cmbBox.SelectionChanged += 
                        new SelectionChangedEventHandler(HandleChanged);
           };
于 2017-06-27T20:12:48.643 回答