/// <summary>
        ///     Creates a DataGridColumn derived ModelItem
        /// </summary>
        internal static ModelItem CreateColumnFromColumnType(EditingContext context, TypeIdentifier dataGridColumnTypeId, ColumnInfo columnGenerationInfo)
        {
            ModelItem dataGridColumn = ModelFactory.CreateItem(context, dataGridColumnTypeId);
            if (columnGenerationInfo.HeaderFromAttribute == null)
            {
                // Default the Header to the property name if there's no attribute tied to it
                dataGridColumn.Properties[PlatformTypes.DataGridColumn.HeaderProperty].SetValue(columnGenerationInfo.PropertyInfo.Name);
            }

            if (dataGridColumnTypeId == PlatformTypes.DataGridTemplateColumn.TypeId)
            {
                return CreateTemplateColumn(context, columnGenerationInfo, dataGridColumn);
            }

            ModelItem binding = ModelFactory.CreateItem(context, PlatformTypes.Binding.TypeId);
            binding.Properties[PlatformTypes.Binding.PathProperty].SetValue(columnGenerationInfo.PropertyInfo.Name);

            // ReadOnly Properties are handled by the runtime so we don't need to alter the Binding here
            // to account for them.

            // Whether or not a column can sort is handled by the runtime as well

            dataGridColumn.Properties[PlatformTypes.DataGridBoundColumn.BindingProperty].SetValue(binding);

            return dataGridColumn;
        }
        /// <summary>
        ///     Creates a DataGridTemplateColumn ModelItem with default templates for this property
        /// </summary>
        internal static ModelItem CreateTemplateColumn(EditingContext context, ColumnInfo columnGenerationInfo, ModelItem dataGridColumn)
        {
            ModelItem displayDataTemplate = CreateDataTemplate(context, PlatformTypes.TextBlock.TypeId, PlatformTypes.TextBlock.TextProperty, columnGenerationInfo.PropertyInfo.Name);
            dataGridColumn.Properties[PlatformTypes.DataGridTemplateColumn.CellTemplateProperty].SetValue(displayDataTemplate);

            ModelItem editingDataTemplate = CreateDataTemplate(context, PlatformTypes.TextBox.TypeId, PlatformTypes.TextBox.TextProperty, columnGenerationInfo.PropertyInfo.Name);
            dataGridColumn.Properties[PlatformTypes.DataGridTemplateColumn.CellEditingTemplateProperty].SetValue(editingDataTemplate);

            return dataGridColumn;
        }
        /// <summary>
        ///     Creates a DataGridColumn derived ModelItem based on the PropertyDescriptor's PropertyType.
        /// </summary>
        internal static ModelItem CreateDefaultDataGridColumn(EditingContext context, ColumnInfo columnGenerationInfo)
        {
            TypeIdentifier dataGridColumnTypeId;

            if (columnGenerationInfo.PropertyInfo.PropertyType == typeof(bool))
            {
                dataGridColumnTypeId = PlatformTypes.DataGridCheckBoxColumn.TypeId;
            }
            else
            {
                dataGridColumnTypeId = PlatformTypes.DataGridTextColumn.TypeId;
            }
            // Add checks here for other column types when they come online

            return CreateColumnFromColumnType(context, dataGridColumnTypeId, columnGenerationInfo);
        }