c# - WPF ListView 选择问题

标签 c# wpf

我有一个 ListView (在扩展选择模式下并与当前项目同步)和一个文本框。文本框允许用户输入搜索条件。在列表框的 TextChanged 事件上,我将搜索条件与 ListView 中的 listviewitems 的名称相匹配,并相应地设置 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);
        }
    }

搜索和选择工作正常。在第一次尝试时,用户可以选择第二个点(第一个点已被搜索选中),并且可以毫无问题地从第一个点进行多选。

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

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

我尝试使用 listViewTrainServiceHelperPattern.SelectedItems.Clear()、SelectedValue(object) 代替 SelectedIndex,但都无济于事。有谁知道造成这种情况的原因以及解决方法吗?

最佳答案

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

关于c# - WPF ListView 选择问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263793/

相关文章:

c# - 如果两个涉及的对象都是在代码隐藏中创建的,则元素绑定(bind)

wpf - 如何在wpf中的组标题中显示属性名称

c# - Combobox如何让所选项目显示主题

c# - 在 Rhino Mocks 中,如何使用空参数 stub 方法?

c# - Entity Framework CreateObjectset 附加方法不更新

c# - 具有效果和触发器的图像模板

c# - 如何将 DataContext 设置为多个类?

c# - 如何在 C# 中将逗号分隔的字符串添加到数据表中?

c# - .NET 的 ConcurrentDictionary 的哪些成员是线程安全的?

c# - 如何在 DataContext 略有不同的情况下重用 UserControl?