Вот что я придумал.Это обеспечивает гибкость, чтобы расширить или свернуть все уровни или определенные уровни.(При желании это можно изменить, чтобы удалить дублирующийся код.) Чтобы развернуть или свернуть все группы на всех уровнях за один вызов, просто передайте "0" для параметра groupingLevel и "true" дляПараметр collapseAllSublevels.Используя HashSet, дубликаты автоматически удаляются из коллекции «groups».
/// <summary>
/// Collapse all groups at a specific grouping level.
/// </summary>
/// <param name="groupingLevel">The grouping level to collapse. Level 0 is the top level. Level 1 is the next level, etc.</param>
/// <param name="collapseAllSublevels">Indicates whether levels below the specified level should also be collapsed. The default is "false".</param>
private void CollapseGroups(int groupingLevel, bool collapseAllSublevels = false)
{
if (myGrid.ItemsSource == null)
return;
HashSet<CollectionViewGroup> groups = new HashSet<CollectionViewGroup>();
foreach (object item in myGrid.ItemsSource)
groups.Add(myGrid.GetGroupFromItem(item, groupingLevel));
foreach (CollectionViewGroup group in groups)
myGrid.CollapseRowGroup(group, collapseAllSublevels);
}
/// <summary>
/// Expand all groups at a specific grouping level.
/// </summary>
/// <param name="groupingLevel">The grouping level to expand. Level 0 is the top level. Level 1 is the next level, etc.</param>
/// <param name="expandAllSublevels">Indicates whether levels below the specified level should also be expanded. The default is "false".</param>
private void ExpandGroups(int groupingLevel, bool expandAllSublevels = false)
{
if (myGrid.ItemsSource == null)
return;
HashSet<CollectionViewGroup> groups = new HashSet<CollectionViewGroup>();
foreach (object item in myGrid.ItemsSource)
groups.Add(myGrid.GetGroupFromItem(item, groupingLevel));
foreach (CollectionViewGroup group in groups)
myGrid.ExpandRowGroup(group, expandAllSublevels);
}