public StartupScreenViewModel(IMessenger messenger)
        {
            MessengerInstance = messenger;


            QuitCommand     = new RelayCommand(() => AppShutdownMessage.Send(MessengerInstance));
            LoadGameCommand = new RelayCommand(() => ShowLoadMenuMessage.Send(MessengerInstance));
            NewGameCommand  = new RelayCommand(() => ShowNewGameMessage.Send(MessengerInstance));
        }
        private void RegisterMessageHandlers()
        {
            ShowNewGameMessage.Register(MessengerInstance, this, SwitchToGameCreationScreen);
            ShowMainMenuMessage.Register(MessengerInstance, this, SwitchToStartupScreen);
            ShowLoadMenuMessage.Register(MessengerInstance, this, () => {
                SwitchToGameLoadScreen();
                LoadGameScreenViewModel.Refresh(SaveManager.AllSaves());
            });


            void OpenGameAction(((string, GameMemento), ViewMode) payload)
            {
                var((id, memento), mode) = payload;
                GameScreenViewModel.Load(id, Game.FromMemento(memento));
                GameScreenViewModel.ActiveMode = mode;

                SwitchToGameScreen();
            }

            // switch to game screen with a newly created game, assigning it an id
            OpenNewGame.Register(MessengerInstance, this, payload => {
                var(game, mode) = payload;
                OpenGameAction(((SaveManager.NextId(), game.Memento), mode));
            });