#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
при попытке добавить его в список!