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

课程评估类型重复添加的异常处理需求(含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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:35:26