У меня плохое знание английского, потому что я не являюсь носителем английского языка.
В моем приложении есть MainWindowView и MainWindowBehavior, а MainWindowView имеет элемент управления (редактор) в виде следующего кода.
<MainWindowView>
<Grid>
<TabControl>
<TabItem>
<Grid>
<Editor x:Name="editor"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
<i:Interaction.Behaviors>
<behaviors:MainWindowBehavior/>
</i:Interaction.Behaviors>
</MainWindowView>
MainWindowBehavior использует свойство Editor в LoadedEventHandler объекта MainWindowView. Следующий код демонстрирует приведенную выше логику.
protected override void OnDetaching()
{
this.AssociatedObject.Loaded -= AssociatedObject_Loaded;
base.OnDetaching();
}
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.Loaded += AssociatedObject_Loaded;
}
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
{
this.mainWindow = sender as MainWindow;
// run time error
this.mainWindow.editor.Parser.ParsingFailed += Parser_ParsingFailed;
}
Но компилятор показывает ошибку во время выполнения, поскольку значение свойства Parser редактора равно нулю. Я попытался инициализировать свойство синтаксического анализатора редактора в функции Constructer, OnApplyTemplate, Loaded EventHandler, но все три случая были вызваны позже, чем Loaded EventHandler из MainWindow.
И в результате выдается ошибка времени выполнения.
Я думаю, что Loaded EventHandler редактора нужно вызывать раньше, чем Loaded EventHandler из MainWindowBehavior. Но на самом деле последовательность обратная.
Не знаю, почему последовательность обратная.
Как мне изменить последовательность загрузки, как я думал?
Спасибо зачтение.