我正在尝试尽可能多地在Xaml(而不是代码隐藏)中为相对简单的应用程序做。我将DataGrid绑定到Silverlight 4中的DomainDataSource,并且我将DomainDataSource的GroupDescriptors绑定到ComboBoxes,允许用户根据它们选择的值对DataGrid中的行进行分组。我想让他们能够点击按钮来折叠/展开所有组。我知道这可以使用PagedCollectionView完成,但后来我最终在代码隐藏中进行分组等。有没有办法在没有的情况下使用PagedCollectionView完成此?
我知道DataGrid.CollapseRowGroup(CollectionViewGroup collectionViewGroup,bool collapseAllSubgroups)方法,但我还没有找到迭代顶级组的方法。
答案 0 :(得分:0)
这就是我想出的。它提供了扩展或折叠所有级别或特定级别的灵活性。 (如果需要,可以对其进行重构以删除重复的代码。)要在单个调用中扩展或折叠所有级别的所有组,只需为groupingLevel参数传入“0”,并为“true”传入“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);
}