/// <summary> /// Converts and groups the values of the specified sequence according to the settings of the specified parameters. /// </summary> /// <param name="sequence">Sequence of items.</param> /// <param name="parameters">Parameters for the grouping operation.</param> /// <returns>Converted and grouped sequence.</returns> private IEnumerable<object> ConvertAndGroupSequence(IEnumerable<object> sequence, GroupingItemsControlConverterParameters parameters) { // Validate parameters var groupSelector = parameters.GroupSelector.GetGroupSelector(); if (null == groupSelector) { throw new NotSupportedException("IGroupingItemsControlConverterSelector.GetGroupSelector must return a non-null value."); } // Do the grouping and ordering var groupedOrderedSequence = sequence.GroupBy(groupSelector).OrderBy(g => g.Key); // Return the wrapped results foreach (var group in groupedOrderedSequence) { yield return new ContentControl { Content = group.Key, ContentTemplate = parameters.GroupHeaderTemplate }; foreach (var item in group) { yield return new ContentControl { Content = item, ContentTemplate = parameters.ItemTemplate }; } } }
/// <summary> /// Converts and groups the values of the specified sequence according to the settings of the specified parameters. /// </summary> /// <param name="sequence">Sequence of items.</param> /// <param name="parameters">Parameters for the grouping operation.</param> /// <returns>Converted and grouped sequence.</returns> private IEnumerable <object> ConvertAndGroupSequence(IEnumerable <object> sequence, GroupingItemsControlConverterParameters parameters) { // Validate parameters var groupSelector = ((IGroupingItemsControlConverterSelector)(parameters.GroupSelector)).GetGroupSelector(); if (null == groupSelector) { throw new NotSupportedException("IGroupingItemsControlConverterSelector.GetGroupSelector must return a non-null value."); } // Do the grouping and ordering var groupedOrderedSequence = sequence.GroupBy(groupSelector).OrderBy(g => g.Key); // Return the wrapped results foreach (var group in groupedOrderedSequence) { yield return(new ContentControl { Content = group.Key, ContentTemplate = parameters.GroupHeaderTemplate }); foreach (var item in group) { yield return(new ContentControl { Content = item, ContentTemplate = parameters.ItemTemplate }); } } }