我的应用程序要求用户输入多个项目,这会在StackPanel中生成许多IntegerUpDown控件。用户必须在每个中选择一个数字。然后,我想将这些值保存到列表中。如何构建此项并从更改项目数量中保存日期?
for(int i=0; i< numberOfItems; i++)
{
iud=new IntegerUpDown();
stackPanel1.Children.Add(iud);
}
这部分工作正常,但我不知道如何将这个可更改数量的IntegerUpDowns控件绑定到某个列表并立即获取所有值。
<StackPanel Name="stackPanel1" Grid.Row="4" Grid.Column="1">
</StackPanel>
示例:用户输入3,这将生成3个IntegerUpDowns。然后用户在每个IntegerUpDown中输入5,14,38。我想将这些数字保存在List<int>
。
我希望这不会太混乱。我不太了解术语,所以我不知道如何寻找解决这个问题的方法。
答案 0 :(得分:1)
从StackPanel获取IntegerUpDown
类型的所有控件。然后,循环遍历它们并获得它们的值。在下面的代码中,ControlsStackPanel
是StackPanel的名称。
var values = new List<int>();
var children = ControlsStackPanel.Children.OfType<IntegerUpDown>();
foreach (var child in children)
{
values.Add(child.Value.Value);
}
或更短:
var values = new List<int>();
foreach (var child in ControlsStackPanel.Children.OfType<IntegerUpDown>())
values.Add(child.Value.Value);
甚至在使用LinQ Select
的一行中:
var values = ControlsStackPanel.Children
.OfType<IntegerUpDown>()
.Select(x => x.Value.Value);
请注意双.Value
。这是因为IntegerUpDown的值是nullable integer
,第二个.Value
获得该可空的整数值。如果IntegerUpDown没有值并且您调用了此值,则在尝试将其添加到列表时,您将获得InvalidOperationException
!