Сохранение содержимого из динамически сгенерированных целых чисел в виде списка

#c# #wpf

#c# #wpf

Вопрос:

Мое приложение просит пользователя ввести несколько элементов, что генерирует такое количество элементов управления IntegerUpDown в StackPanel. Пользователь должен выбрать число в каждом из них. Затем я хочу сохранить эти значения в списке. Как мне создать это и сохранить дату из изменения количества элементов?

 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 целых обновления. Затем пользователь вводит 5, 14, 38 в каждом IntegerUpDown. Я хочу сохранить эти числа в List<int> .

Надеюсь, это не слишком сбивает с толку. Я не так хорошо знаю терминологию, поэтому не знаю, как искать решение этой проблемы.

Комментарии:

1. Вы настолько невероятно далеки от правильного решения вашей проблемы, что я голосую за закрытие вашего вопроса как слишком широкого. Тем временем, пожалуйста, прочтите страницы пошагового руководства: Начало работы с WPF и обзор шаблонов данных в MSDN, чтобы получить лучшее представление о том, как на самом деле, написан WPF.

Ответ №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);
  

Или даже в одной строке с использованием LinQs Select :

 var values = ControlsStackPanel.Children
                               .OfType<IntegerUpDown>()
                               .Select(x => x.Value.Value);
  

Обратите внимание на двойное .Value . Это происходит потому, что значение IntegerUpDown равно a, nullable integer а второе .Value получает целочисленное значение этого nullable . Если у IntegerUpDown нет значения, и вы вызываете это, вы получите InvalidOperationException при попытке добавить его в список!