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

WPF中位运算移除选项问题:如何正确更新FruitType选中状态

解决WPF多选状态更新问题

你代码里的核心问题是对象混淆:你先把fruit.FruitType设为None清空状态,但循环里却一直在给contact.FruitType累加枚举值,两者不是同一个对象,所以fruit.FruitType始终是None。

要实现取消item3、item4后选中状态变为Item1 | Item2,只需要把循环操作的对象改成fruit.FruitType即可,修正后的代码如下:

// 清空原有所有选中状态
fruit.FruitType = NewFruitType.None;

// 遍历已勾选的项,重新构建选中状态
foreach (var fruitType in fruit.FruitTypes.Where(x => x.IsChecked))
{
    fruit.FruitType |= (NewFruitType)fruitType.Id;
}

另外要注意:NewFruitType必须是标记枚举(带有[Flags]特性),否则位运算|=无法正确累加多选状态,示例枚举定义如下:

[Flags]
public enum NewFruitType
{
    None = 0,
    Item1 = 1,
    Item2 = 2,
    Item3 = 4,
    Item4 = 8
}

这样修改后,当你取消item3和item4的勾选,循环只会将Item1和Item2对应的枚举值累加到fruit.FruitType中,最终选中状态就会正确显示为Item1 | Item2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:02:34