public ContentTypeDetailsPage(ContentTypeDetailViewModel viewModel)
        {
            BindingContext = this.viewModel = viewModel;

            var layout = new StackLayout
            {
                Spacing = 20,
                Padding = 15
            };

            var nameLabel = new Label {
                Text = "Name", FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };
            var nameEntry = new Label
            {
                Text     = viewModel.ContentType.name,
                FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Entry))
            };
            var descriptionLabel = new Label
            {
                Text     = "Description",
                FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };
            var descriptionEditor = new Label
            {
                Text     = viewModel.ContentType.description,
                FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Editor)),
                Margin   = 0
            };
            var fieldListLabel = new Label
            {
                Text     = "Fields",
                FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
            };

            layout.Children.Add(nameLabel);
            layout.Children.Add(nameEntry);
            layout.Children.Add(descriptionLabel);
            layout.Children.Add(descriptionEditor);
            layout.Children.Add(fieldListLabel);

            var fieldList = new ListView
            {
                ItemsSource  = viewModel.ContentType.fields,
                ItemTemplate = new DataTemplate(() =>
                {
                    var textCell = new TextCell();

                    textCell.SetBinding(TextCell.TextProperty, "label");
                    textCell.SetBinding(TextCell.DetailProperty, "type");
                    textCell.TextColor   = Color.FromHex("737373");
                    textCell.DetailColor = Color.Gray;

                    return(textCell);
                }),
                VerticalOptions = LayoutOptions.FillAndExpand
            };

            layout.Children.Add(fieldList);

            Title   = viewModel.ContentType.name;
            Content = layout;
        }
        public NewContentItemPage(ContentTypeDetailViewModel viewModel)
        {
            typeViewModel  = viewModel;
            BindingContext = _itemModel;

            _layout = new StackLayout
            {
                Spacing = 20,
                Padding = 15
            };

            // mimic grabbing a column name at runtime and adding it as a property

            foreach (var field in typeViewModel.ContentType.fields)
            {
                var fieldLabel = new Label {
                    Text = field.label, FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
                };
                _layout.Children.Add(fieldLabel);

                switch (field.type)
                {
                case "singleLineText":
                    var fieldEntry = new Entry
                    {
                        StyleId  = field.name,
                        FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Entry))
                    };

                    _layout.Children.Add(fieldEntry);
                    break;

                case "multiLineText":
                    var fieldEditor = new Editor
                    {
                        StyleId       = field.name,
                        FontSize      = Device.GetNamedSize(NamedSize.Small, typeof(Editor)),
                        HeightRequest = 150
                    };

                    _layout.Children.Add(fieldEditor);
                    break;

                default:
                    var fieldDefault = new Entry
                    {
                        StyleId  = field.name,
                        FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Entry))
                    };

                    _layout.Children.Add(fieldDefault);
                    break;
                }
            }

            Title   = $"New {typeViewModel.ContentType.name}";
            Content = _layout;

            var draft = new ToolbarItem
            {
                Text             = "Draft",
                Command          = new Command <bool>(SaveContentItem),
                CommandParameter = false
            };

            ToolbarItems.Add(draft);

            var publish = new ToolbarItem
            {
                Text             = "Publish",
                Command          = new Command <bool>(SaveContentItem),
                CommandParameter = true
            };

            ToolbarItems.Add(publish);
        }