- У меня есть окно с ListBox
- ListBox (MyListBox) имеет DataTable для своего DataContext
- Источник элемента ListBox: {Binding}
- В списке есть UserControl (MyUserControl) как DataTemplate
- UserControl имеет RadioButtons и TextBoxes (сначала они заполняются значениями из DataTable, а затем пользователь может их изменить)
- Окно имеет одну кнопку Отправить
Что я хочу сделать, так это когда пользователь нажимает кнопку отправки
- Для каждого элемента ListBox получите значения из TextBoxes и RadioButton UserControl.
Я использовал этот метод для этой работы:
foreach(var element in MyListBox.Items)
{
var border = MyListBox.ItemContainerGenerator.ContainerFromItem(element)as FrameworkElement;
MyUserControl currentControl = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(myBorder,0) as Border,0)as ContentPresenter,0)as MyUserControl;
//And use currentControl
}
Я ничего не понял, когда использовал 3-5 элементов в списке. Но когда я использовал гораздо больше элементов, я увидел, что «var border» становится «нулевым» после того, как некоторые элементы зациклены в функции foreach.
Я нашел причину здесь:
ListView.ItemContainerGenerator.ContainerFromItem (item) возвращает ноль после 20 элементов
Так что же мне теперь делать? Я хочу получить доступ ко всем элементам и получить их значения, сидя на пользовательских элементах управления.
Спасибо