public void RegisterColumn(IMGridColumn pColumn) { if (ColumnsList.Any(c => c.Identifier == pColumn.Identifier)) { return; } ColumnsList.Add(pColumn); if (pColumn is MGridActionColumn <T> ) { mHasActionColumn = true; } if (pColumn is IMGridPropertyColumn propc) { var iprop = ReflectionHelper.GetIMPropertyInfo(typeof(T), propc.Property, propc.PropertyType); propc.PropertyType = iprop.PropertyType; if (propc.Attributes != null) { iprop.SetAttributes(propc.Attributes); } mPropertyInfoCache.Add(propc, iprop); if (pColumn is IMGridSortableColumn sc && sc.SortDirection != MSortDirection.None) { object comparer = null; if (pColumn is IMGridCustomComparer) { comparer = ((dynamic)pColumn).Comparer; } SortInstructions.Add(new SortInstruction() { Direction = sc.SortDirection, PropertyInfo = iprop, Index = sc.SortIndex, Comparer = comparer }); } } mFilterModel = null; ClearDataCache(); StateHasChanged(); }