コード例 #1
0
ファイル: Selected.cs プロジェクト: forki/Gu.Wpf.DataGrid2D
        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));
        }
コード例 #2
0
ファイル: Selected.cs プロジェクト: jnm2/Gu.Wpf.DataGrid2D
        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));
        }
コード例 #3
0
 /// <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;
     }
 }