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

Xamarin中选择单门课程却显示同Term全部课程的问题排查

问题分析与修复方案

问题原因

你的判断完全正确:参数传递与查询方法不匹配。跳转详情页时传入的是选中课程的CourseId,但详情页调用的GetCourses(int termId)是通过学期ID查询,返回的是该学期下所有课程,而非单门课程的详情,这就是显示全部课程的核心原因。

解决办法

1. 新增按课程ID查询单门课程的方法

在数据访问层(比如课程仓储类)添加一个根据CourseId查询单条课程数据的方法,替代原有的按学期查询方法:

// 示例仓储类中的方法
public Course GetCourseById(int courseId)
{
    // 从数据源(数据库/内存集合)中筛选对应ID的课程
    return _courses.FirstOrDefault(c => c.CourseId == courseId);
    // 若用EF Core则是:return _context.Courses.FirstOrDefault(c => c.CourseId == courseId);
}

2. 修改详情页的参数接收与数据加载逻辑

  • 确保详情页构造函数接收CourseId参数,而非TermId;
  • 调用新的GetCourseById方法获取单门课程数据,绑定到页面控件:
public CoursesDetailPage(int courseId)
{
    InitializeComponent();
    // 获取选中的单门课程
    var targetCourse = _courseRepository.GetCourseById(courseId);
    // 将课程数据绑定到页面(假设用MVVM或直接绑定上下文)
    BindingContext = targetCourse;
}

3. 修正主页面的导航传参逻辑

在主页面CollectionView的选中事件中,确认传递的是选中课程的CourseId:

private void CourseCollection_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var selectedCourse = e.CurrentSelection.FirstOrDefault() as Course;
    if (selectedCourse != null)
    {
        // 跳转时传入选中课程的ID
        Navigation.PushAsync(new CoursesDetailPage(selectedCourse.CourseId));
        // 可选:取消选中状态,避免重复触发
        ((CollectionView)sender).SelectedItem = null;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:00:56