我想要做的是,当用户点击提交按钮时
我正在使用这种方法完成这项工作:
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 border”变为“null”。
我在这里找到了原因: ListView.ItemContainerGenerator.ContainerFromItem(item) return null after 20 items
那我现在该怎么办?我想访问所有项目并将其值设置为用户控件。
由于
答案 0 :(得分:0)
您应该使用实施INotifyPropertyChanged
的对象并将其ObservableCollection
绑定到ItemSource
然后你就可以获得所有项目清单。
这里有一些来自MSDN的快速链接,以获取更多信息 How to: Implement Property Change Notification Binding Sources Overview
你应该谷歌一些关于此的教程。
答案 1 :(得分:0)
Zied的帖子是解决这个问题的方法。但我为我的项目做了以下事情:
我删除了MyListBox.DataContext = myDataTable
并使用了这个:
foreach(DataRow dr in myDataTable.Rows) { MyUserControl muc = new MyUserControl(dr); myListBox.Items.Add(muc); }
foreach(MyUserControl muc in myListBox) { //do what you want }
好吧? :)