我的程序中有一个部分,它列出了数据库中保存在文件中的所有单元,并在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方面是完全新手,所以我真的很感激甚至可能不是直接的解决方案,但有些暗示我应该采用什么样的技术来解决它。
答案 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
属性,您可以检索选择了哪个单位对象/对象。