WPF:为什么我的Combobox SelectionChanged事件在创建图表控件之前被触发

时间:2017-03-16 11:44:54

标签: wpf charts combobox

所以我有申请和另一个子表格:

public partial class SubForm: MetroWindow...

以下是我如何从我的主Sub form打开我的form

SubForm subForm = new SubForm();
subForm.ShowDialog();

在我的Sub form内,我有chart控件:

<telerik:RadCartesianChart
    x:Name="chart" />

Combobox

<ComboBox
    Name="cbInterfaces" 
    ItemsSource="{Binding Path=(my:MyClass.MachineInterfaces)}"
    SelectedIndex="0"
    SelectionChanged="cbInterfaces_SelectionChanged"/>

所以我注意到在Sub form方法之后InitializeComponent操作后,代码进入我的Combobox SelectionChanged事件,我的chart控件是仍然null尚未创建。 所以我再次使用我的Combobox并再次更改选择(在这种情况下我的chart不为空)我不能使用它

1 个答案:

答案 0 :(得分:1)

如果窗口或RadCartesianChart尚未初始化或加载,您可以立即从事件处理程序返回:

private void cbInterfaces_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (!this.IsLoaded || chart == null || !chart.IsLoaded)
        return; //do nothing

    //your code...
}
  

是的,但问题是,在创建并打开此表单后,我想立即在聊天中看到我的鼻烟,而不是再次更改我的组合框选择......

在调用SelectedIndex方法后以编程方式设置InitializeComponent()属性:

public partial class SubForm : Window
{
    public SubForm()
    {
        InitializeComponent();
        cbInterfaces.SelectedIndex = 0;
    }

    private void cbInterfaces_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //...
    }
}
<ComboBox
    Name="cbInterfaces" 
    ItemsSource="{Binding Path=(local:MyClass.MachineInterfaces)}"
    SelectionChanged="cbInterfaces_SelectionChanged"/>