【问题标题】:WPF listview selection problemWPF listview选择问题
【发布时间】:2010-07-16 10:12:17
【问题描述】:

我有一个列表视图(在扩展选择模式下并与当前项目同步)和一个文本框。文本框允许用户输入搜索条件。在列表框的 TextChanged 事件中,我将搜索条件与列表视图中的列表视图项的名称相匹配,并相应地设置 selectedindex。这是为了突出显示它并提供一个简单的选择点以从中选择更多点。请看下面的代码:

    void searchTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
            TextBox textBox = (TextBox)sender;
            if (textBox != null)
            {
                string text = textBox.Text;
                if (text != string.Empty)
                {
                    for (int i = 0; i < listViewPerson.Items.Count; i++)
                    {
                        Person person = (Person)listViewPerson.Items[i];
                        if (person != null)
                        {
                            if (person .Name.StartsWith(text, StringComparison.OrdinalIgnoreCase))
                            {
                                listViewPerson.SelectedIndex = i;
                                listViewPerson.ScrollIntoView(routePoint);
                                break;
                            }
                        }
                    }
                }
                else
                {
                    listViewPerson.SelectedIndex = -1;
                }
            }
        }
        catch (Exception Caught)
        {
            Log.AddExceptionEntry(this, "Could not search ", Caught, Log.Target.All,
                Log.EntryType.Error);
        }
    }

搜索和选择工作正常。在第一次尝试时,用户可以选择第二个点(第一个点已被搜索选择)并从第一个点进行多选而不会出现问题。

然而第二轮列表视图继续“记住”第一次搜索中的第一个选定点(最初由搜索例程设置),因此导致选择从错误的位置开始(即使 selectedindex 是正确的设置为列表视图中的新项目)。

但是,鼠标单击 selectedindex 会导致选择点被正确重置。与使用手动点击相比,selectedindex 在代码中的工作方式似乎有所不同。

我尝试使用 listViewTrainServiceHelperPattern.SelectedItems.Clear(), SelectedValue(object) 代替 SelectedIndex,但都无济于事。有谁知道是什么原因造成的以及如何解决它?

【问题讨论】:

  • 我已经阅读了几遍,但仍然对一些缺失的信息感到有些困惑。选择第二个“点”是什么意思,以及什么动作或事件在“第二次围绕列表视图”开始。如果您选择了多个项目,“selectedindex”将返回第一个选择的索引,而不是最近选择的索引。但是,根据您的问题,我无法判断您的搜索引擎第一次运行和“第二次”之间会发生什么。是否所有项目都被清除,您是否执行自定义逻辑...?
  • 什么是routePoint?似乎这可能存在于对该事件的调用中。此外,这段代码对我来说看起来不是很“MVVM”,因为它在代码隐藏而不是视图模型中具有视图逻辑。如果您在使用 MVVM 实时处理 TextChanged 时遇到问题,请在您的绑定中尝试:UpdateSourceTrigger=PropertyChanged

标签: c# wpf


【解决方案1】:

这听起来类似于 Wpf 树视图错误,如果您通过绑定在项目上设置 IsSelected,则逻辑焦点将保留在先前选择的项目上。尝试使用 ListView.ItemContainerGenerator.ContainerFromItem(newlySelectedItem) 获取新选择的 ListViewItem 的句柄,然后对其调用 focus() 。我很想知道这是否适合你。

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多