首页 文章

listBox selectedIndex始终为0,除非我让线程等待

提问于
浏览
0

我有一个手动填充的listBox . 当用户选择项目时,我使用所选索引的值来重新创建包含新数据的列表 . 但是,它似乎总是返回0,除非我放入一个断点 . 使用断点它完美地工作 . 我看了一下这个问题:WPF ListBox SelectionChanged event并且让线程睡眠70ms的建议大部分时间都有效 . 200ms工作更可靠!!

我猜这是一个线程问题,但我不知道如何使事件处理程序等待选择事件正确完成而不是Thread.Sleep(),这显然不能令人满意 .

我试图使用e.AddedItems但是它有同样的问题 - 在事件完成之前没有AddedItems . 我不得不让线程睡眠以确保有一些工作要做 . 这是我的事件处理程序代码:

private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (listBox.SelectedIndex != -1)
        {
            selectedTopicID = listBox.SelectedIndex;
            listBox.Items.Clear();  //Breakpoint at start of line will fix issue
            foreach (Skill skill in setOfSkills)
            {
                if (skill.topicID == selectedTopicID)
                {
                    string skillName = skill.skillName;
                    ListBoxItem nextSkill = new ListBoxItem();
                    nextSkill.Content = skillName;
                    nextSkill.Height = 50;
                    listBox.Items.Insert(0, nextSkill);
                }
            }
            currentList = CurrentListType.Skill;
        }
    }

任何建议都感激不尽 .

为了响应KANAX,我添加了SelectedIndex的Console输出,当我选择第5项时得到了这个:

enter image description here

然后,应用程序显示第一个项目的内容 . 其他编辑:我怀疑listbox.Items.Clear()的作用 . 如果我要替换内容,我需要它,但它是否会触发对SelectionChanged的调用,结果不可预测?

2 回答

  • 0

    selectionchanged事件在更改索引之前执行 . 您应该使用SelectedIndexChanged事件来满足您的需求 .

    检查一下,https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectedindexchanged(v=vs.110).aspx

  • 1

    我已经放弃了尝试控制selectionChanged事件的流程 . 我很确定我的问题在于ListBox.Items.Clear() . 我通过不覆盖列表但是根据原始选择在不同的ListBox中编写新条目来解决我自己的问题 .

    我想保留旧条目,但如果需要,可以在写完新条目后清除它们 .

相关问题