0

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

 <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 )
                        { 


                        }

                    }
4

2 回答 2

3

您可以将IsChecked类型的属性Nullable<bool>(可以写为bool?)添加到数据项类并双向绑定CheckBox.IsChecked属性:

<CheckBox Name="CheckBoxZone" IsChecked={Binding IsChecked, Mode=TwoWay} ... />

现在您可以简单地遍历所有项目并检查它们的IsChecked状态:

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

或使用 Linq:

int numChecked =
    itemsControl.Items.Cast<MyItem>().Count(i => (bool)i.IsChecked);

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

于 2012-05-16T08:05:11.140 回答
0

OfTypeLINQ的使用方法

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

我使用OfType而不是Cast因为OfType即使有一个复选框项目或所有项目都是复选框,它也会起作用。

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

于 2012-05-16T08:38:07.240 回答