Во-первых, я думаю, что вы должны сохранить обработчик событий code-behind, нет смысла менять простой двухстрочный обработчик событий на сложного командного монстра без какой-либо практической причины (и не говорите о тестируемости, это главное меню, оно будет проверяться при каждом запуске приложения).
Теперь, если вы хотите пройти чистый маршрут MVVM, все, что вам нужно сделать, чтобы заставить ваше меню запустить команду, сначала, в некотором разделе ресурсов, добавить этот стиль:
<Style x:Key="MenuItemStyle" TargetType="MenuItem">
<Setter Property="Command"
Value="{Binding DataContext.SwitchViewCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
<Setter Property="CommandParameter"
Value="{Binding}"/>
</Style>
Этот стиль заставит пункт меню запустить команду SwitchViewCommand на присоединенной модели представления с DataContext MenuItem в качестве параметра команды.
Фактическое представление совпадает с вашим кодом с дополнительной ссылкой на этот стиль, как ItemContainerStyle (поэтому он применяется к элементу меню, а не к содержимому DataTemplate):
<DockPanel LastChildFill="False">
<Menu DockPanel.Dock="Top"
ItemsSource="{Binding PageItemsMainMenu}"
ItemTemplate="{StaticResource MainMenuStyle}"
ItemContainerStyle="{StaticResource MenuItemStyle}"/>
<ContentControl
Content="{Binding SelectedPageItem}"/>
</DockPanel>
Теперь в нужной модели представления (я использовал строки, потому что у меня нет вашего кода PageItem):
private string _selectedViewItem;
public List<string> PageItemsMainMenu { get; set; }
public string SelectedPageItem
{
get { return _selectedViewItem; }
set { _selectedViewItem = value; OnNotifyPropertyChanged("SelectedPageItem"); }
}
public ICommand SwitchViewCommand { get; set; }
И используйте любой класс команд, который вы используете, чтобы команда вызывала этот код:
private void DoSwitchViewCommand(object parameter)
{
SelectedPageItem = (string)parameter;
}
Теперь, когда пользователь щелкает пункт меню, этот пункт меню вызывает SwitchViewCommand с элементом страницы в качестве параметра.
Команда вызовет DoSwitchViewCommand, который установит свойство SelectedPageItem
Свойство вызовет NotifyPropertyChanged, который будет обновлять пользовательский интерфейс посредством привязки данных.
Или вы можете написать 2-строчный обработчик событий на ваш выбор