如何从CheckBoxList添加到List<>

本文关键字:List 添加 CheckBoxList | 更新日期: 2023-09-27 18:17:13

例如,我有一个5个复选框项的列表:

    <ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
        <CheckBox x:Name="Item1" Content="Item1" Checked="Item1_Checked"/>
        <CheckBox x:Name="Item2" Content="Item2" Checked="Item2_Checked"/>
        <CheckBox x:Name="Item3" Content="Item3" Checked="Item3_Checked"/>
        <CheckBox x:Name="Item4" Content="Item4" Checked="Item4_Checked"/>
        <CheckBox x:Name="Item5" Content="Item5" Checked="Item5_Checked"/>
    </ListBox>

对于每个被选中的复选框,我希望将该项添加到一个名为myList的列表中。

所以我试了这个:

    public MainWindow()
    {
        InitializeComponent();
    }
    List<string> myList;
    private void Item1_Checked(object sender, RoutedEventArgs e)
    {
        myList.Add(Item1);
    }

问题是,"Item1"不是一个对象,所以它不能被添加到对象列表中。

在我的列表中有一些对象之后,我想按照特定的顺序对它们进行排序,例如按名称排序,然后在预先制作的模板中显示列表。

有什么建议吗?

希望你能理解我,我的英语不太好,c#和wpf我都是新手:p

如何从CheckBoxList添加到List<>

您需要使用传递给检查处理程序的RoutedEventsArgs参数的Source属性。此外,您还可以对所有复选框使用相同的事件处理程序:

<ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
    <CheckBox x:Name="Item1" Content="Item1" Checked="Item_Checked"/>
    <CheckBox x:Name="Item2" Content="Item2" Checked="Item_Checked"/>
    <CheckBox x:Name="Item3" Content="Item3" Checked="Item_Checked"/>
    <CheckBox x:Name="Item4" Content="Item4" Checked="Item_Checked"/>
    <CheckBox x:Name="Item5" Content="Item5" Checked="Item_Checked"/>
</ListBox>

private void Item_Checked(object sender, RoutedEventArgs e)
{
    myList.Add((e.Source as CheckBox).Name);
}

触发事件的控件在RoutedEventArgs.Source中。当然,您需要将其强制转换为控件类型。

在您的特殊情况下,您也可以使用sender,但通常依赖Source属性更安全。