如果我有一个具有SelectionChanged事件的ComboBox,它会在我加载控件时触发。
所以在页面加载时我设置了SelectedValue和SelectionChanged事件,这不是我想要发生的事情。
停止使用该公约的接受程度是什么?
答案 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);
};