- У меня есть окно со списком ListBox
- ListBox (MyListBox) имеет DataTable для своего DataContext
- ItemSource ListBox: {Binding}
- Listbox имеет 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 элементов в Listbox. Но когда я использовал гораздо больше элементов, я увидел, что «var border» получает «null» после того, как некоторые элементы зацикливаются в функции foreach.
Я нашел здесь причину: ListView.ItemContainerGenerator.ContainerFromItem (item) return null после 20 позиций
Так что же мне теперь делать? Я хочу получить доступ ко всем элементам и получить их значения в пользовательских элементах управления.
Спасибо