当我添加SelectionChanged事件以及代码中用于处理该事件的方法到以下组合框时:
....
<ComboBox Name="OrderBox" HorizontalAlignment="Left" SelectionChanged="OrderBox_OnSelectionChanged">
<ComboBoxItem Margin="4,4,4,4" IsSelected="True">Por Nombre (A - Z)</ComboBoxItem>
<ComboBoxItem Margin="4,4,4,4">Por Nombre (Z - A)</ComboBoxItem>
<ComboBoxItem Margin="4,4,4,4">Por Apellido (A - Z)</ComboBoxItem>
<ComboBoxItem Margin="4,4,4,4">Por Apellido (Z - A)</ComboBoxItem>
</ComboBox>
....
在看到未初始化控件的错误后,我看到调试应用程序,即当应用程序调用 InitializeComponent()时,它要做的第一件事就是调用我的组合框事件处理程序方法( OrderBox_OnSelectionChanged() )。因此,我真的不能使用组合框的事件,因为此后每个控制器都将被加载。
如果我从组合框xaml中删除事件,并且事件处理程序不会发生,即使我有更多事件处理程序,也不会发生错误,只是由于某种我看不见的原因才调用该事件处理程序。
代码很简单:
public MainWindow()
{
InitializeComponent(); //FROM HERE IT GOES TO OrderBox_OnSelectionChanged()
Displayer();
}
private void OrderBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
....
希望你知道我在做错什么。
答案 0 :(得分:1)
将OrderBox.SelectionChanged+=OrderBox_OnSelectionChanged;
放入MainWindow
构造函数中,并在您的xaml中删除SelectionChanged
属性。
答案 1 :(得分:1)
使用InitializeComponent();
加载表单时,除非您另外明确设置,否则该页面上的组合框将被设置为(通常)其项目的索引为-1。无论哪种方式,在初始化表单并命中SelectionChanged
事件时,所选项目都会更改为其默认值。您可以通过放置错误处理行来解决遇到的事件:
private void OrderBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (OrderBox.SelectedItem != null)
{
//your code
}
}