Если вы беспокоитесь о наличии множества команд в вашей MainWindow ViewModel и использовании ленты, вы можете попробовать создать отдельную ViewModel для каждой вашей вкладки.
В приложении, которое я сейчас разрабатываю, напримерЯ разделил каждую вкладку ленты на отдельный UserControl (который расширяет RibbonTabItem, потому что я использую Fleent Ribbon).Те представления имеют свои на ViewModels.Фактически, эти ViewModel являются зависимостями, внедряемыми с помощью конструктора импорта MEF (Managed Extensibility Framework), а также вкладки являются зависимостями, внедряемыми в MainWindow с помощью его конструктора импорта.Хотя этот подход, вероятно, является гигантским излишним, он обладает некоторой гибкостью.Обратите внимание, что ссылка на команду на определенной вкладке из самого MainWindow не является проблемой, потому что ViewModel MainWindow может иметь зависимость ViewModel вкладки, внедренную в себя и предоставлять некоторые ее команды;или какая-то команда может прийти в форме определенной ViewModel, которая вводится во все ViewModel, которые в ней нуждаются (последняя, вероятно, более чистая ...)