【问题标题】:Grouping data in UWP DataGrid在 UWP DataGrid 中对数据进行分组
【发布时间】:2021-01-11 14:36:27
【问题描述】:

我正在尝试使用以下代码在 UWP DataGrid 中显示由Context 属性分组的Information 对象。第一种方法创建一个ObservableCollection<GroupInfoCollection<Information>>();,它被设置为CollectionViewSource.Source,如第二部分所示。使用的 XAML 显示在最后。

我可以在 UI 中看到组标题为 Group,但没有任何子项。我不确定我错过了什么。此外,组标题未显示 Context 属性名称。

var query = from item in exception.Information
  group item by item.Context into g
  select new { GroupName = g.Key, Items = g };

var information = new ObservableCollection<GroupInfoCollection<Information>>();

foreach (var group in query)
{
  var info = new GroupInfoCollection<Information>
  {
    Key = group.GroupName
  };
  foreach (var item in group.Items)
  {
    info.Items.Add(item);
  }
  information.Add(info);
}
return information;

CollectionViewSource groupedItems = new CollectionViewSource
{
  IsSourceGrouped = true, 
  Source = information // returned from above method
  };
InformationGrid.ItemsSource = groupedItems.View;
                <controls1:DataGrid x:Name="InformationGrid" AutoGenerateColumns="False" >
                    <controls1:DataGrid.Columns>
                        <controls1:DataGridTemplateColumn Header="Name" Width="48">
                            <controls1:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate x:DataType="jama:Information">
                                    <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="{x:Bind local:JamaOptionPage.GetGlyph(Level)}"/>
                                </DataTemplate>
                            </controls1:DataGridTemplateColumn.CellTemplate>
                        </controls1:DataGridTemplateColumn>
                        <controls1:DataGridTemplateColumn Header="Name" Width="220">
                            <controls1:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate x:DataType="jama:Information">
                                    <HyperlinkButton Content="{x:Bind Name}" NavigateUri="{x:Bind Link}" />
                                </DataTemplate>
                            </controls1:DataGridTemplateColumn.CellTemplate>
                        </controls1:DataGridTemplateColumn>
                        <controls1:DataGridTextColumn Header="Error" Binding="{Binding Message}"/>
                    </controls1:DataGrid.Columns>
                </controls1:DataGrid>

【问题讨论】:

    标签: windows-community-toolkit


    【解决方案1】:

    我犯了两个错误。我对GroupInfoCollection 的实现有点缺陷。而不是

    public class GroupInfoCollection<T>
    {
      public string Key { get; set; }
      public List<T> Items { get; set; } = new List<T>();
    }
    

    应该是

    public class GroupInfoCollection<T> 
    {
      public object Key { get; set; }
      public new IEnumerator<T> GetEnumerator()
    }
    
    

    另外,标题是空的,为此需要类似的东西

    InformationGrid.LoadingRowGroup += InformationGridOnLoadingRowGroup;
    
    
    private void InformationGridOnLoadingRowGroup(object sender, DataGridRowGroupHeaderEventArgs e)
    {
      var group = e.RowGroupHeader.CollectionViewGroup;
      var item = group.GroupItems[0] as Information;
      e.RowGroupHeader.PropertyValue = item.Context;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多