Прежде всего, MVVM не является очень строгим набором правил и определенно оставляет место для широкого спектра вкусов.
В зависимости от того, создан ли сначала View или ViewModel, вы можете различить два подхода:
Первый подход ViewModel , где сначала создается экземпляр ViewModel, а затем обычно на основе некоторого соглашения выбирается View. DataTemplateSelector является хорошим примером.
Представление сначала подход, где представление создается первым (обычно Window или UserControl) и выбирается какое-то условное представление. Это может быть обязанностью View создать собственный экземпляр ViewModel, или он может быть делегирован кому-то другому.
Когда дело доходит до инициализации, это всегда должно быть сделано в приложении .xaml или app.xaml.cs, поскольку это точка входа для вашего приложения. Вы также должны понимать, что процесс подачи заявки связан с Dispatcher l oop. Когда последнее окно в вашем приложении закрыто, диспетчерский цикл завершается, и процесс приложения завершается. Последнее окно обычно является MainWindow.
Кроме того, учитывайте время запуска приложения. Вы хотите отобразить некоторые окна как можно скорее. Поэтому, если вы хотите сделать какую-либо логи c до того, как появится окно, убедитесь, что вы не выполняете никаких операций ввода-вывода, вызовов базы данных или API, и т.д. c.
У меня обычно есть Bootstrapper. класс CS, который я вызываю из App.xaml.cs. В его обязанности входит настройка Io C и отображение интерфейса пользователя. Это может быть окно загрузки, а затем MainWindow.
В Bootstrapper.cs вы можете сначала создать экземпляр MainWindowViewModel, создать MainWindow и назначить ViewModel его DataContext, либо вы можете просто создать MainWindow и оставить создание ViewModel. до самого главного окна. Я склонен делать последнее.
Нет ничего плохого ни в одном из подходов, и ни один из них не нарушает принцип MVVM.
Моя самая большая рекомендация для вас - если вы не можете выбрать между двумя или больше вариантов, выберите более простой. Или, другими словами, не усложняйте вещи, если у вас нет очень веских причин для этого. KISS