public static void CreateOutput(object sender, object selectedItem)
        {
            if (selectedItem is OutputCollectionViewModel outputCollectionViewModel)
            {
                CreateOutput(sender, outputCollectionViewModel.Parent);
                return;
            }

            if (!(selectedItem is GroupViewModel entityGroupViewModel))
            {
                return;
            }

            var button = (Button)sender;

            var type = (string)button.CommandParameter;

            OutputBase entity;

            switch (type)
            {
            case nameof(RenderArrayHint):
                entity = RenderArrayHint.New();
                break;

            case nameof(RenderNextDate):
                entity = RenderNextDate.New("Name", "0001-01-01", "Weekly");
                break;

            case nameof(RenderIndex):
                entity = RenderIndex.New();
                break;

            case nameof(RenderEntity):
                entity = RenderEntity.New();
                break;

            case nameof(RenderLink):
                entity = RenderLink.New();
                break;

            case nameof(RenderProperty):
                entity = RenderProperty.New("Display Name", "Property Name");
                break;

            case nameof(RenderValue):
                entity = RenderValue.New("Name", "Value");
                break;

            case nameof(RenderTypeName):
                entity = RenderTypeName.New("Name");
                break;

            case nameof(RenderTaxPeriodDate):
                entity = RenderTaxPeriodDate.New("Name", "2020", "1");
                break;

            case nameof(RenderConstant):
                entity = RenderConstant.New("Name", "Constant Name", typeof(DateTime));
                break;

            case nameof(RenderTaxPeriod):
                entity = RenderTaxPeriod.New("Name", "Monthly", "0001-01-01");
                break;

            case nameof(RenderDateAdd):
                entity = RenderDateAdd.New("Name", "0001-01-01", "Day", "1");
                break;

            case nameof(RenderUniqueKeyFromLink):
                entity = RenderUniqueKeyFromLink.New("Name", "[Link]");
                break;

            case nameof(Avg):
                entity = Avg.New("Name", "Property");
                break;

            case nameof(Max):
                entity = Max.New("Name", "Property");
                break;

            case nameof(Min):
                entity = Min.New("Name", "Property");
                break;

            case nameof(Sum):
                entity = Sum.New("Name", "Property");
                break;

            case nameof(Count):
                entity = Count.New("Name");
                break;

            case nameof(ExpressionCalculator):
                entity = ExpressionCalculator.New("Name", "1 + 2 - 3 * 4 / 5", rounding: RoundingOption.NotSet);
                break;

            case nameof(Distinct):
                entity = Distinct.New("Name", "Property");
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            entityGroupViewModel.Element.Outputs.Add(entity);
            var viewModelCollection = entityGroupViewModel.Children.OfType <OutputCollectionViewModel>().First();

            var viewModel = new OutputViewModel(entity, viewModelCollection);

            viewModelCollection.Children.Add(viewModel);

            entityGroupViewModel.IsExpanded = true;
            viewModelCollection.IsExpanded  = true;
            viewModel.IsSelected            = true;
            viewModel.IsExpanded            = true;
        }