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

Spectre.Console中如何实现多选菜单内的单选组?

实现Spectre.Console多选菜单中指定组的单选功能

这个需求可以实现,核心是利用MultiSelectionPrompt的SelectionChanged事件手动控制EUR组内的单选逻辑,具体实现如下:

修正原代码的链式调用错误

原代码中.choiceConfig.AddChoiceGroup是冗余写法,链式调用时直接使用.AddChoiceGroup即可,无需重复引用变量名。

完整实现代码

// 声明变量接收选中结果
string[] currencies;

var choiceConfig = new MultiSelectionPrompt<string>()
    .Title("Choose currencies to process")
    .PageSize(10)
    .InstructionsText(
        "[grey](Press [blue]<space>[/] to toggle a currency, " +
        "[green]<enter>[/] to accept)[/]")
    .AddChoiceGroup("EUR", ["EUR", "EUR2"])
    .AddChoices(new[] { "GBP", "USD", "CAD" })
    // 监听选中变化事件,处理EUR组内单选逻辑
    .OnSelectionChanged((prompt, selectedItems, currentItem) =>
    {
        // 仅处理EUR组内的两个选项
        if (currentItem is "EUR" or "EUR2")
        {
            // 获取同组的另一个选项
            var siblingItem = currentItem == "EUR" ? "EUR2" : "EUR";
            // 如果另一个选项已被选中,自动取消它
            if (selectedItems.Contains(siblingItem))
            {
                prompt.Unselect(siblingItem);
            }
        }
    });

currencies = AnsiConsole.Prompt(choiceConfig).ToArray();

逻辑说明

  • 当用户切换EUR或EUR2的选中状态时,OnSelectionChanged事件会触发
  • 事件处理逻辑会判断当前操作的是EUR组内的选项,然后检查同组的另一个选项是否已被选中
  • 如果已选中,则调用prompt.Unselect方法取消该选项的选中状态,实现组内单选效果
  • GBP、USD、CAD等其他选项不受此逻辑影响,依然保持多选功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:43:21