访问新添加的listview行WPF C中的控件#
我在WPF和C中有一个listview,它使用ObservableCollection来填充数据。当触发某个事件时,我调用一个函数将新行插入集合。然后我需要访问该行中的控件 我遇到的问题是,在插入行并尝试在listview行之间循环后,该行在我的循环中显示为null访问新添加的listview行WPF C中的控件#,wpf,listview,Wpf,Listview,我在WPF和C中有一个listview,它使用ObservableCollection来填充数据。当触发某个事件时,我调用一个函数将新行插入集合。然后我需要访问该行中的控件 我遇到的问题是,在插入行并尝试在listview行之间循环后,该行在我的循环中显示为null if (addNewNote) { _resultsCollection.Insert(0, new ResultsData {
if (addNewNote)
{
_resultsCollection.Insert(0, new ResultsData
{
Notes = "Data to Insert",
// ... rest of fields
});
} // end if (addNewNote)
for (int currRowIndex = 0; currRowIndex < this.ResultsList.Items.Count; currRowIndex++)
{
System.Windows.Controls.ListViewItem currRow =
(System.Windows.Controls.ListViewItem)this.ResultsList.ItemContainerGenerator.ContainerFromIndex(currRowIndex);
if (currRow != null)
{
System.Windows.Controls.TextBox tb = FindByName("EditNotesTextBox", currRow) as System.Windows.Controls.TextBox;
// do stuff with controls ...
}
}
if(addNewNote)
{
_ResultCollection.Insert(0,新结果数据
{
Notes=“要插入的数据”,
//…其他领域
});
}//如果结束(addNewNote)
对于(int currowIndex=0;currowIndex
此处,当currRowIndex为零时,currRow始终为空
情况不应该是这样,因为我刚刚补充了这一点。是否因为我试图在插入它的同一个函数中访问它,而listview尚未更新?我可以访问listview中的每一行。有更好的解决办法吗?谢谢 为了首先访问新添加的项目,需要通过
ItemContainerGenrator
生成该项目(UI)的容器。生成是在同一(UI)线程上完成的,因此您不能在添加项目后立即访问容器
您可以订阅ResultsList.ItemContainerGenerator.StatusChanged
事件,并在事件处理程序中检查状态是否为GeneratorStatus.ContainerGenerated
,然后可以获取容器
ResultsList.ItemContainerGenerator.StatusChanged += OnGeneratorStatusChanged;
...
private void OnGeneratorStatusChanged(object sender, EventArgs e)
{
if (MyListBox.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
{
// Access containers for newly added items
}
}
请参阅WPF博士关于其工作原理的详细说明。很抱歉延迟响应,这对我来说非常有效,谢谢!