You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#如何显示对象数组内容 如何在DataGrid中展示FootballTeam数组

问题原因

WPF DataGrid默认开启自动生成列时,无法直接解析展示ICollection<TeamDate>这类集合类型的属性,只会显示集合的类型标识,也就是你截图里的(Collection)效果。

实现方案

以下是两种常用的实现方式,可根据需求选择:


方案1:日期集合拼接为字符串展示(适合轻量展示场景)

先给FootballTeam类新增一个只读的格式化属性,将日期集合转为可直接展示的字符串:

public class FootballTeam
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Country { get; set; }
    public virtual ICollection<TeamDate> TeamDates { get; set; }
    // 新增格式化展示属性
    public string FormattedTeamDates => TeamDates == null ? "无" : string.Join(";", TeamDates.Select(t => t.date.ToString("yyyy-MM-dd")));
}

然后手动定义DataGrid的列,关闭自动生成列:

<DataGrid x:Name="TeamGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="队伍ID" Binding="{Binding Id}" />
        <DataGridTextColumn Header="队伍名称" Binding="{Binding Name}" />
        <DataGridTextColumn Header="所属国家" Binding="{Binding Country}" />
        <DataGridTextColumn Header="关联日期" Binding="{Binding FormattedTeamDates}" />
    </DataGrid.Columns>
</DataGrid>

后台直接赋值数据源即可:

// footballTeamArray为你拿到的FootballTeam类型数组
TeamGrid.ItemsSource = footballTeamArray;

方案2:行详情嵌套展示日期集合(适合日期较多的分层展示场景)

不需要修改实体类,直接用DataGrid的行详情模板,选中某行时展开展示所有关联日期:

<DataGrid x:Name="TeamGrid" AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn Header="队伍ID" Binding="{Binding Id}" />
        <DataGridTextColumn Header="队伍名称" Binding="{Binding Name}" />
        <DataGridTextColumn Header="所属国家" Binding="{Binding Country}" />
    </DataGrid.Columns>
    <!-- 行详情模板,展示当前行对应的所有日期 -->
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding TeamDates}" Padding="15,5">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding date, StringFormat=yyyy-MM-dd}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>

后台赋值逻辑和方案1一致。


内容的提问来源于stack exchange,提问作者TheMadMattt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:15:03