0

在我的 Silverlight 4 页面的构造函数中,我调用 InitializeComponent,紧接着是以下语句:

OriginalDefaultCharts = new Dictionary<Chart, string>{ 
    { chartTop, ( ( ComboBoxItem ) comboInstant.SelectedItem ).Tag.ToString ( ) },
    { chartBottom, ( ( ComboBoxItem ) comboCumulative.SelectedItem ).Tag.ToString ( ) } };

这几乎总是有效,但偶尔,此语句会抛出 Null 异常,因为 comboCumulative 为 null。

我看到在 InitializeComponent 中实例化了 comboCumulative 的位置,但由于这通常有效但并非总是如此,这让我觉得我应该等待一些东西。将 InitializeComponent 之后的所有构造函数逻辑放入 Loaded 事件中是否很典型?

我这样做了,但是由于我的代码以前很少失败,所以我不能 100% 确定我已经解决了这个问题。

4

1 回答 1

0

你做。

是的,对 Initialize 组件的调用是异步的(更具体地说,UI 组件的构建是异步的)。

因此,在初始化组件之后对 UI 元素执行任何操作是一种非常糟糕的做法(实际上最好不要在 InitializeComponent 之后执行任何操作:让您的默认构造函数清理干净)。

好的做法是像您一样在加载的事件中执行这些操作。

不过,请注意,即使在您加载的事件中,仍然不会创建一些 UI 元素(尤其是不可见的元素)。

于 2013-02-12T07:48:45.540 回答