我有一个 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/