访问新添加的listview行WPF C中的控件#

访问新添加的listview行WPF C中的控件#,wpf,listview,Wpf,Listview,我在WPF和C中有一个listview,它使用ObservableCollection来填充数据。当触发某个事件时,我调用一个函数将新行插入集合。然后我需要访问该行中的控件 我遇到的问题是,在插入行并尝试在listview行之间循环后,该行在我的循环中显示为null if (addNewNote) { _resultsCollection.Insert(0, new ResultsData {

我在WPF和C中有一个listview,它使用ObservableCollection来填充数据。当触发某个事件时,我调用一个函数将新行插入集合。然后我需要访问该行中的控件

我遇到的问题是,在插入行并尝试在listview行之间循环后,该行在我的循环中显示为null

       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博士关于其工作原理的详细说明。

很抱歉延迟响应,这对我来说非常有效,谢谢!