/// <summary> /// Helper Method which creates a default DataGridColumn object for the specified property type. /// </summary> /// <param name="itemProperty"></param> /// <returns></returns> internal static DataGridColumn CreateDefaultColumn(ItemPropertyInfo itemProperty) { Debug.Assert(itemProperty != null && itemProperty.PropertyType != null, "itemProperty and/or its PropertyType member cannot be null"); DataGridColumn dataGridColumn = null; DataGridComboBoxColumn comboBoxColumn = null; Type propertyType = itemProperty.PropertyType; // determine the type of column to be created and create one if (propertyType.IsEnum) { comboBoxColumn = new DataGridComboBoxColumn(); comboBoxColumn.ItemsSource = Enum.GetValues(propertyType); dataGridColumn = comboBoxColumn; } else if (typeof(string).IsAssignableFrom(propertyType)) { dataGridColumn = new DataGridTextColumn(); } else if (typeof(bool).IsAssignableFrom(propertyType)) { dataGridColumn = new DataGridCheckBoxColumn(); } else if (typeof(Uri).IsAssignableFrom(propertyType)) { dataGridColumn = new DataGridHyperlinkColumn(); } else { dataGridColumn = new DataGridTextColumn(); } // determine if the datagrid can sort on the column or not if (!typeof(IComparable).IsAssignableFrom(propertyType)) { dataGridColumn.CanUserSort = false; } dataGridColumn.Header = itemProperty.Name; // Set the data field binding for such created columns and // choose the BindingMode based on editability of the property. DataGridBoundColumn boundColumn = dataGridColumn as DataGridBoundColumn; if (boundColumn != null || comboBoxColumn != null) { Binding binding = new Binding(itemProperty.Name); if (comboBoxColumn != null) { comboBoxColumn.SelectedItemBinding = binding; } else { boundColumn.Binding = binding; } PropertyDescriptor pd = itemProperty.Descriptor as PropertyDescriptor; if (pd != null) { if (pd.IsReadOnly) { binding.Mode = BindingMode.OneWay; dataGridColumn.IsReadOnly = true; } } else { PropertyInfo pi = itemProperty.Descriptor as PropertyInfo; if (pi != null) { if (!pi.CanWrite) { binding.Mode = BindingMode.OneWay; dataGridColumn.IsReadOnly = true; } } } } return dataGridColumn; }
internal DataGridAutoGeneratingColumnEventArgs(DataGridColumn column, ItemPropertyInfo itemPropertyInfo) : this(column, itemPropertyInfo.Name, itemPropertyInfo.PropertyType, itemPropertyInfo.Descriptor) { }