【问题标题】:Accessing controls in newly added listview row WPF C#在新添加的列表视图行 WPF C# 中访问控件
【发布时间】:2011-02-18 21:14:30
【问题描述】:

我在 WPF 和 C# 中有一个列表视图,它使用 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 ...
            }
        } 

当 currRowIndex 为零时,这里的 currRow 始终为空。

这不应该是这样,因为我刚刚添加了它。是因为我试图在插入它的同一个函数中访问它,而列表视图尚未更新吗?我能够访问列表视图中的每一行。有更好的解决方案吗?谢谢!

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    为了首先可以访问新添加的项目,该项目 (UI) 的容器需要由 ItemContainerGenrator 生成。生成是在同一个 (UI) 线程上完成的,因此您无法在添加项目后立即访问容器。

    您可以订阅ResultsList.ItemContainerGenerator.StatusChanged事件并在事件处理程序中检查状态是否为GeneratorStatus.ContainersGenerated然后您可以获得容器。

    ResultsList.ItemContainerGenerator.StatusChanged += OnGeneratorStatusChanged;
    
    ...
    
    private void OnGeneratorStatusChanged(object sender, EventArgs e)
    {
        if (MyListBox.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
        {
            // Access containers for newly added items
        }        
    }
    

    请参阅 Dr.WPF 的 this article 详细描述其工作原理。

    【讨论】:

    • 抱歉延迟回复,这对我来说非常有用,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多