我把一个XML文件转换成一个列表。PaintClass有几个参数,如颜色(红色或橙色或蓝色)或纹理(光滑或光滑)等。
现在我有了一些复选框,这样用户就可以确定他想要看到什么PaintClass。例如,他能够同时选择红色、橙色和蓝色,然后每个PaintClass都会出现。但是当他选择光滑的复选框时,只有红色/蓝色/橙色油漆具有光滑的纹理才会显示出来。
什么是最好的方法来做到这一点,而不是大量的如果-声明?
你好,尼尔斯
发布于 2013-11-08 11:41:33
一个简单的解决办法是:
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属性中,然后遍历复选框:
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);
} 发布于 2013-11-08 11:43:50
在您的复选框处理程序中,如下所示:
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 ));https://stackoverflow.com/questions/19858148
复制相似问题