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

WPF如何在ListView中为每个School生成对应DataGrid?

在WPF的ListView中为每个School绑定对应Teachers的DataGrid方案

完全可以实现这个需求,你之前的XAML写法错误在于没有为ListView指定ItemTemplate——ListView的ItemsSource绑定的是Schools集合,每个列表项的上下文是单个School对象,而非整个集合,直接在ListView内部放DataGrid会导致绑定失效。

正确的XAML实现

<ListView ItemsSource="{Binding Schools}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <!-- 用StackPanel垂直排列学校相关元素和教师表格 -->
            <StackPanel Margin="0 0 0 15">
                <!-- 可选:如果School类添加Name属性,可在此显示学校名称 -->
                <TextBlock Text="教师列表" FontSize="14" FontWeight="Bold" Margin="0 0 0 5"/>
                
                <DataGrid ItemsSource="{Binding Teachers}" AutoGenerateColumns="False">
                    <!-- 手动定义列,精准控制显示内容 -->
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="姓名" Binding="{Binding Name}"/>
                        <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
                        <DataGridTextColumn Header="地址" Binding="{Binding Address}"/>
                        <DataGridTextColumn Header="排名" Binding="{Binding Ranking}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

关键说明

  • ListView.ItemTemplate:定义每个School项的渲染结构,模板内的DataContext是单个School实例,因此DataGrid的ItemsSource直接绑定Teachers即可
  • AutoGenerateColumns="False":关闭自动列生成,手动定义列能避免不必要的属性列,同时自定义表头和显示顺序
  • 若需展示学校名称等额外信息,只需在School类中添加对应属性,再在StackPanel内新增TextBlock绑定该属性即可

测试用ViewModel初始化示例

为快速验证效果,可在MainViewModel构造函数中添加测试数据:

public class MainViewModel
{
    public ObservableCollection<School> Schools { get; set; }

    public MainViewModel()
    {
        Schools = new ObservableCollection<School>
        {
            new School
            {
                Teachers = new ObservableCollection<Teacher>
                {
                    new Teacher { Name = "张三", ID = "T001", Address = "北京", Ranking = "A" },
                    new Teacher { Name = "李四", ID = "T002", Address = "上海", Ranking = "B" }
                }
            },
            new School
            {
                Teachers = new ObservableCollection<Teacher>
                {
                    new Teacher { Name = "王五", ID = "T003", Address = "广州", Ranking = "A" }
                }
            }
        };
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:10:12