我有一个列表框和复选框,如何找到在 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 )
                        { 

                        }
                    }

我有一个列表框和复选框,如何找到在 WPF 中选中的复选框

可以将类型为

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的情况下,即使单个项目没有复选框,也会给出错误。