如何检查哪些动态复选框?

时间:2015-01-20 17:48:07

标签: c# wpf

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

 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);
        }

如何获得某些列表,或者如何单独检查每个人?或者我可以以某种方式给他们一些身份证?

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

1 个答案:

答案 0 :(得分:0)

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

您可以使用它来存储"一个指向db对象的链接(你称之为" unit")。看看:

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

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