Лучшее решение для простых нужд
Ответ Джозефа - лучшее решение для вашей простой задачи: просто используйте привязку данных и позвольте модели данных справиться с этим.
Ответ на поставленный вопрос
Существуют более сложные сценарии, когда вам действительно нужен контроль после того, как абсолютно все закончило загрузку и все события сработали. Не существует единственного события, которое происходит «мертвым в последнюю очередь», но легко эффективно выполнить собственное событие, используя очередь Диспетчера.
Вот как это сделать:
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(() =>
{
var x = ComputeSomething(1, 2, 3);
DoSomething(x, "Test");
}));
Все внутри {} будет выполнено, когда WPF завершит все с более высоким приоритетом, чем ContextIdle, который включает все обработчики событий, загруженные события, входные события, рендеринг и т. Д.
Последовательность событий при создании и отображении окна
В соответствии с запросом приведена последовательность основных событий в WPF при создании и отображении окна:
Конструкторы и геттеры / сеттеры вызываются при создании объектов, включая PropertyChangedCallback, ValidationCallback и т. Д. Для обновляемых объектов и любых объектов, которые наследуются от них
Когда каждый элемент добавляется в визуальное или логическое дерево, запускается его Инициализированное событие, которое приводит к тому, что стили и триггеры применяются в дополнение к любой инициализации, специфичной для элемента, которую вы можете определить [примечание: инициализированное событие не запускается для листьев в логическом дереве, если в его корне нет PresentationSource (например, Window)]
Окно и все неразвернутые визуальные элементы в нем измеряются, что вызывает шаблон ApplyTemplate для каждого элемента управления, который вызывает дополнительную конструкцию дерева объектов, включая дополнительные конструкторы и методы получения / установки
Окно и все не свернутые визуальные эффекты на нем расположены
Окно и его потомки (логические и визуальные) получают событие Loaded
Все привязки данных, которые не удалось установить при первой установке, повторяются
Окну и его потомкам предоставляется возможность визуально визуализировать их содержимое
Шаги 1-2 выполняются при создании окна, независимо от того, отображается оно или нет. Другие шаги обычно не выполняются до тех пор, пока не появится окно, но они могут произойти раньше, если их запустить вручную.