/// <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);
            }
        }
        internal static DataGridColumnModelCollection Create(ModelItem dataGrid)
        {
            DataGridColumnModelCollection columns = new DataGridColumnModelCollection(dataGrid);

            columns.Initializing = true;
            try
            {
                foreach (ModelItem dataGridColumn in dataGrid.Properties["Columns"].Collection)
                {
                    columns.Add(dataGridColumn);
                }
            }
            finally
            {
                columns.Initializing = false;
            }

            return(columns);
        }