private void Game_OnPropertyAboutToChange(object?sender, PropertyAboutToChangeEventArgs e)
        {
            if (!ReferenceEquals(sender, Model.Game))
            {
                return;
            }

            GameOnPropertyAboutToChange(e);
        }
        private void Model_OnPropertyAboutToChange(object?sender, PropertyAboutToChangeEventArgs e)
        {
            if (!ReferenceEquals(sender, Model))
            {
                return;
            }

            switch (e.PropertyName)
            {
            case nameof(AbstractWindowViewModel.Game):
            {
                Unsubscribe(e.OldValue as ViewModel, Game_OnPropertyChanged);
                Unsubscribe(e.OldValue as ViewModel, Game_OnPropertyAboutToChange);
                Subscribe(e.NewValue as ViewModel, Game_OnPropertyChanged);
                Subscribe(e.NewValue as ViewModel, Game_OnPropertyAboutToChange);
                break;
            }
            }

            ModelOnPropertyIsAboutToChange(e);
        }
 protected virtual void GameOnPropertyAboutToChange(PropertyAboutToChangeEventArgs e)
 {
 }
 protected virtual void ModelOnPropertyIsAboutToChange(PropertyAboutToChangeEventArgs e)
 {
 }