我有一个列表框和复选框,如何找到在 WPF 中选中的复选框
本文关键字:复选框 WPF 何找 列表 有一个 | 更新日期: 2023-09-27 18:34:31
我想查找代码选中了多少复选框:
<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 )
{
}
}
可以将类型为
Nullable<bool>
(可以写为 bool?
(的 IsChecked
属性添加到数据项类中,并双向绑定 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就足够了?
使用 LINQ OfType
方法
int result =
listBoxZone.Items.OfType<CheckBox>().Count(i => i.IsChecked == true);
我使用OfType
而不是Cast
因为即使只有一个复选框项目或所有项目都是复选框OfType
也可以工作。
在Cast
的情况下,即使单个项目没有复选框,也会给出错误。