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
相关产品推荐
相关产品推荐

