C# MVVM menu

.xaml


<Menu DockPanel.Dock="Top" x:Name="MainMenu">
    <MenuItem Header="_Fichier">
    <MenuItem Header="_Nouveau patient" x:Name="miNewPatient" Command="{Binding NewPatientCommand}" InputGestureText="Ctrl+N"/>
    <MenuItem Header="_Ouvrir..." x:Name="miOpen" InputGestureText="Ctrl+O"/>
    <Separator/>
    <MenuItem Header="_Exporter" x:Name="miExport"/>
    <MenuItem Header="_Initialiser" x:Name="miInitialize" Command="{Binding InitializeDatabaseCommand}"/>
    <Separator/>
    <MenuItem Header="_Quitter" x:Name="miExit" InputGestureText="Alt+F4"/>
   </MenuItem>
<Menu>
  
  

.cs


public partial class MainMedicalManagement : Window
{
  public MainMedicalManagement()
  {
    InitializeComponent();
    DataContext = new XXXX_ViewModel();
  }
}
  

View Model


using System.Windows.Input;

public class XXXX_ViewModel
{
  public ICommand NewPatientCommand { get; }
  public ICommand InitializeDatabaseCommand { get; }

  public MainMedicalManagementViewModel()
  {
    NewPatientCommand = new XXXX_RelayCommand(_ => NewPatient(), _=> true);
    InitializeDatabaseCommand = new XXXX_RelayCommand(InitializeDatabase, _ => true);
  }

  private void NewPatient() {
    MessageBox.Show("Nouveau patient");
  }

  private void InitializeDatabase(object? choice)
  {
    MessageBox.Show("Initialisation de la base de données", "Info");
  }
}

Relay Command


 public class xxxx_RelayCommand : ICommand
 {
    public event EventHandler? CanExecuteChanged;
    private readonly Action<object?> _execute;
    private readonly Func<object?, bool>? _canExecute;


    public bool CanExecute(object? parameter)
    {
        return _canExecute==null ? true : _canExecute(parameter);
    }

    public void Execute(object? parameter)
    {
      if (_execute != null)
      {
        _execute(parameter);
      }
    }

    public XXXX_RelayCommand(Action<object?> execute, Func<object?, bool>? canExecute = null)
    { 
      _execute = execute; 
      _canExecute = canExecute; 
    }
 }