【发布时间】:2010-05-29 13:42:54
【问题描述】:
- 我有一个有列表框的窗口
- ListBox(MyListBox) 的 DataContext 有一个 DataTable
- ListBox 的 ItemSource 是:{Binding}
- Listbox 有一个 UserControl(MyUserControl) 作为 DataTemplate
- UserControl 有 RadioButtons 和 TextBoxes(起初它们填充了来自 DataTable 的值,然后用户可以更改它们)
- 窗口有一个提交按钮
我想要做的是,当用户点击提交按钮时
- 对于每个 ListBox 项,从 UserControl 的 TextBoxes 和 RadioButtons 中获取值。
我在这项工作中使用了这种方法:
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
}
在 Listbox 中使用 3-5 个项目时,我什么也没意识到。但是当我使用更多项目时,我看到在 foreach 函数中循环某些元素后“var 边框”变为“空”。
我在这里找到了原因: ListView.ItemContainerGenerator.ContainerFromItem(item) return null after 20 items
那我现在能做什么?我想访问所有项目并在用户控件上获取它们的值。
谢谢
【问题讨论】:
标签: wpf listbox user-controls datatemplate