我有一个列表框和复选框,我如何找到wpf中检查了多少复选框

时间:2012-05-16 07:44:07

标签: c# .net wpf

我想找到代码检查了多少复选框:

 <Grid Width="440" >

<ListBox Name="listBoxZone" ItemsSource="{Binding TheList}"  Background="White" Margin="0,120,2,131">  
      <ListBox.ItemTemplate>
            <HierarchicalDataTemplate>
  <CheckBox Name="CheckBoxZone" Content="{Binding StatusName}" Tag="{Binding StatusId}" Margin="0,5,0,0" VerticalAlignment ="Top"   />
             </HierarchicalDataTemplate>
      </ListBox.ItemTemplate>
</ListBox>

      </Grid>

这是我的代码,我想找到多少复选框?

for (int i = 0; i < listBoxZone.Items.Count; i++)
                    {
                        if (CheckBoxZone.IsChecked == true )
                        { 


                        }

                    }

2 个答案:

答案 0 :(得分:3)

您可以将类型为IsChecked的{​​{1}}属性(可以写为Nullable<bool>)添加到数据项类中,并双向绑定CheckBox.IsChecked属性:< / p>

bool?

现在,您可以简单地遍历所有项目并检查其<CheckBox Name="CheckBoxZone" IsChecked={Binding IsChecked, Mode=TwoWay} ... /> 州:

IsChecked

或与Linq:

int numChecked = 0;
foreach (MyItem item in listBoxZone.Items)
{
    if ((bool)item.IsChecked) // cast Nullable<bool> to bool
    {
        numChecked++;
    }
}

请注意:为什么在ListBox中使用HierarchicalDataTemplate,DataTemplate就足够了?

答案 1 :(得分:0)

使用LINQ的OfType方法

int result = 
            listBoxZone.Items.OfType<CheckBox>().Count(i => i.IsChecked == true);

我使用OfType代替Cast,因为即使有一个复选框项目或所有项目都是复选框,OfType也会有效。

如果是Cast,即使单个项目不是复选框也会出错。