InitializeComponent()调用另一个方法

时间:2018-07-06 15:31:04

标签: c# wpf xaml events components

当我添加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)
{

}

....

希望你知道我在做错什么。

2 个答案:

答案 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
    }
}