如何获取哪些动态制作的复选框被选中?

How to get which of dynamically made checkboxes are checked?

我的程序中有一个部分列出了保存在文件中的数据库中的所有单位,并在列表框中为每个单位创建一个项目,如下所示:

 public static void populateFormatedUnitListBox(Database db, ListBox lb)
    {
        lb.Items.Clear();
        int index = 0;
        foreach (var unit in db.units)
        {
            if (unit == null) break;
            var item = new StackPanel();
            item.Orientation = Orientation.Horizontal;
            item.VerticalAlignment = System.Windows.VerticalAlignment.Center;
            item.Width = lb.Width-5;
            item.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;

            var row1 = new StackPanel();
            row1.Orientation = Orientation.Vertical;
            row1.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;

            var checkbox = new CheckBox();
            checkbox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
            checkbox.Name = "UnitCheck" + index;
            index++;

            item.Children.Add(checkbox);

            var text = new TextBlock();
            text.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            text.Text = unit.name;
            text.FontSize = 10;

            row1.Children.Add(text);


            var row2 = new TextBlock();
            row2.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            row2.Text = " 0 / " + unit.wordCount + " (0%)";
            row2.FontSize = 10;
            row1.Children.Add(row2);

            item.Children.Add(row1);

            lb.Items.Add(item);
        }

我如何获得某种列表,其中哪些已被检查或如何单独检查每个人?或者我可以给他们一些 ID 吗?

我正在学习 C#,并且我在 WPF 方面完全是新手,所以我真的很感激,甚至可能不是直接的解决方案,但一些提示我应该采用什么样的技术来解决它。

正如 BradleyDotNET 建议的那样,MVVM 应该是您的选择。 无论如何,解决您的问题的最快(但不是最好的)可以是 CheckBox 控件的 Tag 属性。

您可以使用它来 "store" 一个 link 到您的数据库对象(您称之为 "unit")。看看:

var checkbox = new CheckBox();
checkbox.VerticalAlignment = System.Windows.VerticalAlignment.Center;
checkbox.Name = "UnitCheck" + index;
checkbox.Tag = unit.ID;
index++;

其中 unit.ID 是您的对象的唯一标识符。 因此,您只需使用 foreach 循环并检查 Tag 属性 即可找到选中了哪个复选框,您可以检索选择了哪个单元 object/objects was/were。