我想找到代码检查了多少复选框:
<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 )
{
}
}
答案 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
,即使单个项目不是复选框也会出错。