如果我有一个具有 SelectionChanged 事件的 ComboBox,它会在我加载控件时触发。
因此,在页面加载时,我设置了 SelectedValue 并触发了 SelectionChanged 事件,这不是我想要发生的。
阻止这种情况的公认方法是什么?
如果我有一个具有 SelectionChanged 事件的 ComboBox,它会在我加载控件时触发。
因此,在页面加载时,我设置了 SelectedValue 并触发了 SelectionChanged 事件,这不是我想要发生的。
阻止这种情况的公认方法是什么?
两个明显的解决方案是 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 处理程序时进行检查。
我遇到了一个特殊的情况:
如果您使用的是枢轴,并且过早触发控制位于 PivotItem > 0 中,您仍然会遇到问题。
在这种情况下,似乎 this.Loaded() 仅指 PivotItem“0”,并且在 UI 中更改为其他 PivotItem 无论如何都会触发事件。
在这种情况下,解决方案是(以您的示例):
cmbBox.Loaded += (s, args) =>
{
cmbBox.SelectionChanged +=
new SelectionChangedEventHandler(HandleChanged);
};