将动态生成的整数向上内容保存到列表中

时间:2014-07-07 13:05:54

标签: c# wpf

我的应用程序要求用户输入多个项目,这会在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>

我希望这不会太混乱。我不太了解术语,所以我不知道如何寻找解决这个问题的方法。

1 个答案:

答案 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