У меня есть просмотр списка (в расширенном режиме выбора и синхронизации с текущим элементом) и текстовое поле. Текстовое поле позволяет пользователю вводить критерии поиска. В событии TextChanged списка я сопоставляю критерии поиска с именами элементов списка в окне списка и соответствующим образом устанавливаю выбранный индекс. Это как для выделения, так и для обеспечения легкой точки выбора для выбора других точек. Смотрите код ниже:
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);
}
}
Поиск и выбор работает просто отлично. С первой попытки пользователь может выбрать вторую точку (первая уже выбрана поиском) и без проблем выбрать несколько из первой точки.
Однако 2-й раз вокруг списка продолжает «запоминать» первую выбранную точку из первого поиска (которая была первоначально установлена подпрограммой поиска), в результате чего выбор начинается с неправильного места (даже если выбранный индекс правильно установить новый элемент в списке).
Однако щелчок мыши по выбранному индексу приводит к корректному сбросу точки выбора. Кажется, что selectedindex работает по-другому в коде по сравнению с использованием ручных кликов.
Я пытался использовать listViewTrainServiceHelperPattern.SelectedItems.Clear (), SelectedValue (object) вместо SelectedIndex, но все безрезультатно. Кто-нибудь имеет какие-либо идеи, что вызывает это и как обойти это?