首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于多个复选框过滤List<CustomClass>

如何基于多个复选框过滤List<CustomClass>
EN

Stack Overflow用户
提问于 2013-11-08 11:34:46
回答 2查看 565关注 0票数 0

我把一个XML文件转换成一个列表。PaintClass有几个参数,如颜色(红色或橙色或蓝色)或纹理(光滑或光滑)等。

现在我有了一些复选框,这样用户就可以确定他想要看到什么PaintClass。例如,他能够同时选择红色、橙色和蓝色,然后每个PaintClass都会出现。但是当他选择光滑的复选框时,只有红色/蓝色/橙色油漆具有光滑的纹理才会显示出来。

什么是最好的方法来做到这一点,而不是大量的如果-声明?

你好,尼尔斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-08 11:41:33

一个简单的解决办法是:

代码语言:javascript
复制
List<Color> allowedColors = new List<Color>();
if (redCheckBox.IsChecked)
  allowedColors.Add(Color.Red);
.
.
.
List<Texture> allowedTextures = new List<Texture>();
if (smoothCheckBox.IsChecked)
  allowedTextures.Add(Texture.Smooth);
.
.
.

filtered = paintList.Where( p => allowedColors.Contains(p.Color) &&
                              allowedTextures.Contains(p.Texture));

另一种方法是将颜色值存储在复选框的Tag属性中,然后遍历复选框:

代码语言:javascript
复制
redCheckBox.Tag = Color.Red;
blueCheckBox.Tag = Color.Blue;
// etc...

List<Color> colors = new List<Color>();
foreach (Object control in checkboxContainer.Children)
{ 
  var c = (control as CheckBox);
  if ( null == c )
    continue;
  colors.Add(c.Tag as Color);
} 
票数 1
EN

Stack Overflow用户

发布于 2013-11-08 11:43:50

在您的复选框处理程序中,如下所示:

代码语言:javascript
复制
List<Color> colorsToDisplay;

//add all colors that are checked to colorsToDisplay
//..

List<PaintClass> toDisplay =
    paintClassList.
    .Where(p => colorsToDisplay.Any(c => c == p.Color)
                && (smoothCheckbox.Checked ? p.IsSmooth : true ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19858148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档