private static object GetCellItem(this DataGridColumn column, object item) { if (column == null || item == null) { return(null); } var descriptor = (PropertyDescriptor)column.GetValue(PropertyDescriptorProperty); if (descriptor != null) { return(descriptor.GetValue(item)); } var binding = (column as DataGridBoundColumn)?.Binding as Binding; if (binding == null) { binding = (column as CellTemplateColumn)?.Binding as Binding; if (binding == null) { return(null); } } descriptor = TypeDescriptor.GetProperties(item) .OfType <PropertyDescriptor>() .SingleOrDefault(x => x.Name == binding.Path.Path); column.SetCurrentValue(PropertyDescriptorProperty, descriptor); return(descriptor?.GetValue(item)); }
private static object?GetCellItem(this DataGridColumn column, object?item) { if (column is null || item is null) { return(null); } var descriptor = (PropertyDescriptor)column.GetValue(PropertyDescriptorProperty); if (descriptor != null) { return(descriptor.GetValue(item)); } var binding = column switch { DataGridBoundColumn c => c.Binding as Binding, CellTemplateColumn c => c.Binding as Binding, _ => null, }; if (binding is null) { return(null); } descriptor = TypeDescriptor.GetProperties(item) .OfType <PropertyDescriptor>() .SingleOrDefault(x => x.Name == binding.Path.Path); column.SetCurrentValue(PropertyDescriptorProperty, descriptor); return(descriptor?.GetValue(item)); }
/// <summary> /// Apply settings to columns /// </summary> /// <param name="column"></param>The actual column to be modified /// <param name="gridColumnCount"></param>The position of the actual column /// <param name="sortDescriptions"></param>The sort setting (Accending, Decending) public void Apply(DataGridColumn column, int gridColumnCount, SortDescriptionCollection sortDescriptions) { column.Width = new DataGridLength(WidthValue, WidthType); column.SetCurrentValue(DataGridColumn.VisibilityProperty, Visibility); column.SortDirection = SortDirection; if (SortDirection != null) { sortDescriptions.Add(new SortDescription(PropertyPath, SortDirection.Value)); } if (column.DisplayIndex != DisplayIndex) { var maxIndex = (gridColumnCount == 0) ? 0 : gridColumnCount - 1; column.DisplayIndex = (DisplayIndex <= maxIndex) ? DisplayIndex : maxIndex; } }