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

嵌套GridView绑定JSON的majors数据时重复显示最后一条如何解决

问题修复方案

错误原因

  • 内层GridView的数据源绑定错误,错误绑定了页面全局的majordatasource,没有绑定每个外层Ujian对象自带的专业列表
  • 后台解析JSON时MajorClass实例化位置错误,所有专业都复用同一个对象实例,导致最终所有条目都显示最后一次赋值的内容
  • 解析出的专业数据没有存入对应Ujian实例的majordatasource,而是全部存入了全局列表

修复步骤

1. 修正XAML内层GridView绑定

把内层GridView的ItemsSource改成绑定当前数据上下文(Ujian实例)的majordatasource属性:

<GridView x:Name="asesmenGridView">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid x:Name="asesmenGrid"> 
                <TextBlock  
                    x:Name="judulT"
                    Text="{Binding Title}"/>
                <GridView
                    x:Name="majorGridView"
                    ItemsSource="{Binding majordatasource}">
                    <GridView.ItemTemplate>
                        <DataTemplate x:DataType="local:MajorClass">
                            <Grid>
                                <TextBlock
                                    x:Name="kelasT"
                                    Text="{x:Bind Major}"  />
                            </Grid>
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

2. 修正后台JSON解析逻辑

调整MajorClass实例化位置,将解析出的专业存入对应Ujian实例的专业列表:

public MainPage()
{
    this.InitializeComponent();
    this.DataContext = this;
}
public List<Ujian> ujiandatasource { get; set; } = new List<Ujian>();    

// 以下接口请求逻辑放在你的异步方法中
string urlPath = "https://.../choose-exam/2";
var httpClient = new HttpClient(new HttpClientHandler());
httpClient.DefaultRequestHeaders.Add("Authorization",
    string.Format("Bearer {0}", tkn));
var response = await httpClient.GetAsync(urlPath);
string jsonText = await response.Content.ReadAsStringAsync();
try
{
    JsonArray jsonArray = JsonArray.Parse(jsonText);
    foreach (JsonValue groupValue in jsonArray)
    {
        JsonObject groupObject = groupValue.GetObject();
        string title = groupObject["title"].GetString();
        JsonArray majorArray = groupObject["majors"].GetArray();
        
        Ujian ujian = new Ujian();
        ujian.Title = title;
        
        foreach (JsonValue majorValue in majorArray)
        {
            // 每个专业单独实例化MajorClass对象
            MajorClass majorC = new MajorClass();
            JsonObject majorObject = majorValue.GetObject();
            double majorID = majorObject["major_id"].GetNumber();
            string major = majorObject["major"].GetString();

            majorC.MajorID = (int)majorID;
            majorC.Major = major;
            // 专业数据存入当前Ujian的专属列表
            ujian.majordatasource.Add(majorC);
        }
        ujiandatasource.Add(ujian);
    }
    asesmenGridView.ItemsSource = ujiandatasource;
}
catch (Exception ex)
{
    // 按需补充异常处理逻辑
}

3. 可选优化Ujian构造函数

带参构造函数补充majordatasource初始化,避免空引用异常:

public Ujian(string title)
{
    Title = title;
    majordatasource = new ObservableCollection<MajorClass>();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:03