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

