Регистрация обработчика события для события Loaded, когда оно выполняется в XAML, выполняется сгенерированным частичным классом во время вызова InitializeComponent()
в коде вашего конструктора.
С этим объяснил:
В XAML: Вы сразу видите, что есть обработчик события Loaded, когда вы смотрите на XAML. Это не «спрятано» в коде где-то. Кроме того, с MVVM у вас часто нет / ничтожно малое выделение кода. Таким образом, вы можете изменить свой элемент управления на DataTemplate, который автоматически подключает ViewModel как DataContext.
В коде: У вас может быть несколько сложное выражение, которое трудно / невозможно выразить в XAML. Например, вы можете получить обработчик из контейнера или фабрики. Тогда вы можете подключить событие в коде позади.
В общем, если у вас нет особых причин, я бы выбрал XAML-маршрут.