private void PrepareGroupRow(GridRowModel decorator, DataGridGroupHeader groupHeader) { if (groupHeader != null) { groupHeader.Owner = this.owner; var context = new GroupHeaderContext() { Level = decorator.ItemInfo.Level, Descriptor = this.owner.GroupDescriptors[decorator.ItemInfo.Level], Group = decorator.ItemInfo.Item as IDataGroup, IsExpanded = !decorator.ItemInfo.IsCollapsed, Grid = this.owner }; groupHeader.DataContext = context; groupHeader.IsExpanded = context.IsExpanded; this.UpdateGroupHeaderStyleAndTemplate(groupHeader, context); groupHeader.IndentWidth = this.owner.IndentWidth * decorator.ItemInfo.Level; if (groupHeader.IsFrozen) { // We assume that no more that 20 GroupDescriptions will be added. // If needed this number can be increased. Canvas.SetZIndex(groupHeader, MaxGroupCount - decorator.ItemInfo.Level); } } }
private void UpdateGroupHeaderStyleAndTemplate(DataGridGroupHeader groupHeader, GroupHeaderContext context) { var style = this.owner.GroupHeaderStyle; if (style == null) { if (this.owner.GroupHeaderStyleSelector != null) { style = this.owner.GroupHeaderStyleSelector.SelectStyle(context, groupHeader); } } if (style != null) { groupHeader.Style = style; } else { groupHeader.ClearValue(DataGridGroupHeader.StyleProperty); } var dataTemplate = this.owner.GroupHeaderTemplate; if (dataTemplate == null) { if (this.owner.GroupHeaderTemplateSelector != null) { dataTemplate = this.owner.GroupHeaderTemplateSelector.SelectTemplate(context, groupHeader); } } if (dataTemplate != null) { groupHeader.ContentTemplate = dataTemplate; } else { groupHeader.ClearValue(DataGridGroupHeader.ContentTemplateProperty); } }