/// <summary>
        ///     Create DataGridColumns for all the datasoure properties that don't already have columns
        /// </summary>
        private void CreateAllButton_Click(object sender, RoutedEventArgs e)
        {
            bool hasColumnsAlready = _columns.Count != 0;
            DataGridColumnTypeModel columnTypeModel = columnTypeComboBox.SelectedItem as DataGridColumnTypeModel;

            if (columnTypeModel == null)
            {
                throw new Exception("unexpected state");
            }

            // Set databinding related properties
            DataGridHelper.SparseSetValue(_dataGrid.Properties[DataGrid.AutoGenerateColumnsProperty], false);

            foreach (DataSourcePropertyModel pm in _dataSourceProperties)
            {
                bool addThisColumn = true;

                if (!hasColumnsAlready)
                {
                    addThisColumn = true;
                }
                else
                {
                    addThisColumn = !(_columns.Includes(dataGridColumnModel => pm.Name.Equals(dataGridColumnModel.BindingPropertyName)));
                }

                if (addThisColumn)
                {
                    ModelItem dataGridColumn = columnTypeModel.CreateDataGridColumn(_context, pm.Property);
                    _columns.Add(dataGridColumn);
                }
            }

            _dataSourcePropertiesCVS.View.Refresh();
        }
        /// <summary>
        ///     Create a DataGridColumn for the selected data source property
        /// </summary>
        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            DataGridColumnTypeModel columnTypeModel = columnTypeComboBox.SelectedItem as DataGridColumnTypeModel;

            if (columnTypeModel == null)
            {
                throw new Exception("unexpected state");
            }

            if (dataSourceColumnsListBox.SelectedItems.Count > 0)
            {
                int oldSelectedIndex = dataSourceColumnsListBox.SelectedIndex;
                DataSourcePropertyModel[] itemsToAdd = new DataSourcePropertyModel[dataSourceColumnsListBox.SelectedItems.Count];
                dataSourceColumnsListBox.SelectedItems.CopyTo(itemsToAdd, 0);

                foreach (DataSourcePropertyModel pm in itemsToAdd)
                {
                    ModelItem dataGridColumn = columnTypeModel.CreateDataGridColumn(_context, pm.Property);
                    _columns.Add(dataGridColumn);
                }

                DataGridHelper.SparseSetValue(_dataGrid.Properties[DataGrid.AutoGenerateColumnsProperty], false);
                _dataSourcePropertiesCVS.View.Refresh();
                dataSourceColumnsListBox.SelectedIndex = Math.Min(oldSelectedIndex, dataSourceColumnsListBox.Items.Count - 1);
            }
        }
        private void CreateUnboundButton_Click(object sender, RoutedEventArgs e)
        {
            DataGridColumnTypeModel columnTypeModel = columnTypeComboBox.SelectedItem as DataGridColumnTypeModel;

            if (columnTypeModel == null)
            {
                throw new Exception("unexpected state");
            }

            // Set databinding related properties
            DataGridHelper.SparseSetValue(_dataGrid.Properties[DataGrid.AutoGenerateColumnsProperty], false);

            ModelItem dataGridColumn = columnTypeModel.CreateDataGridColumn(_context);

            _columns.Add(dataGridColumn);
        }