课程评估类型重复添加的异常处理需求(含Picker可选方案)
评估类型重复校验实现方案
方案一:保留Picker控件实现校验
假设你已经有存储课程现有评估的集合(比如ObservableCollection<string> CourseAssessments),在添加评估的触发逻辑(按钮点击/Command)中加入以下校验:
后台代码(代码隐藏方式)
private void AddAssessmentBtn_Click(object sender, EventArgs e) { // 获取Picker选中的评估类型 var selectedType = AssessmentType.SelectedItem as string; if (string.IsNullOrEmpty(selectedType)) { DisplayAlert("提示", "请先选择评估类型", "确定"); return; } // 校验当前课程是否已存在该类型的评估 if (CourseAssessments.Contains(selectedType)) { DisplayAlert("提示", $"该课程已添加过{selectedType}类型的评估", "确定"); return; } // 数量限制校验已完成,直接执行添加逻辑 CourseAssessments.Add(selectedType); // 可选:重置Picker选中状态 AssessmentType.SelectedItem = null; }
MVVM模式下的实现
如果采用MVVM,在ViewModel中绑定Picker的SelectedItem,并在添加Command中处理校验:
// ViewModel中的属性 public ObservableCollection<string> CourseAssessments { get; set; } = new ObservableCollection<string>(); public ObservableCollection<string> AssessmentTypes { get; set; } = new ObservableCollection<string> { "Objective", "Performance" }; public string SelectedAssessmentType { get; set; } public ICommand AddAssessmentCommand => new Command(() => { if (string.IsNullOrEmpty(SelectedAssessmentType)) { // 这里可以通过弹窗服务或MessagingCenter提示用户选择类型 return; } if (CourseAssessments.Contains(SelectedAssessmentType)) { // 提示重复添加 return; } CourseAssessments.Add(SelectedAssessmentType); SelectedAssessmentType = null; });
对应的XAML绑定调整:
<Picker Grid.Row="3" Grid.Column="1" Title="Select an assessment type" ItemsSource="{Binding AssessmentTypes}" SelectedItem="{Binding SelectedAssessmentType}"> </Picker>
方案二:改用字符串输入(Entry)实现校验
如果放弃Picker,改用Entry让用户输入评估类型,需要同时校验输入合法性和重复情况:
修改后的XAML
<Label Grid.Row="3" Grid.Column="0" FontSize="Medium" VerticalTextAlignment="Center">Assessment Type</Label> <Entry Grid.Row="3" Grid.Column="1" x:Name="AssessmentTypeEntry" Placeholder="请输入Objective或Performance"/>
后台校验逻辑
private void AddAssessmentBtn_Click(object sender, EventArgs e) { var inputType = AssessmentTypeEntry.Text?.Trim(); if (string.IsNullOrEmpty(inputType)) { DisplayAlert("提示", "请输入评估类型", "确定"); return; } // 先校验输入是否为允许的类型 var allowedTypes = new List<string> { "Objective", "Performance" }; if (!allowedTypes.Contains(inputType, StringComparison.OrdinalIgnoreCase)) { DisplayAlert("提示", "仅支持输入Objective或Performance类型", "确定"); return; } // 统一格式避免大小写差异导致的误判 var normalizedType = inputType.ToUpperInvariant(); if (CourseAssessments.Any(a => a.ToUpperInvariant() == normalizedType)) { DisplayAlert("提示", $"该课程已存在{inputType}类型的评估", "确定"); return; } // 执行添加逻辑 CourseAssessments.Add(inputType); AssessmentTypeEntry.Text = string.Empty; }
内容的提问来源于stack exchange,提问作者Benn_ht
相关产品推荐
相关产品推荐

