Проблема выбора списка WPF - PullRequest
3 голосов
/ 16 июля 2010

У меня есть просмотр списка (в расширенном режиме выбора и синхронизации с текущим элементом) и текстовое поле. Текстовое поле позволяет пользователю вводить критерии поиска. В событии 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, но все безрезультатно. Кто-нибудь имеет какие-либо идеи, что вызывает это и как обойти это?

1 Ответ

1 голос
/ 27 июня 2011

Это похоже на ошибку дерева просмотра Wpf, где, если вы устанавливаете IsSelected на элемент через привязку, логический фокус остается на ранее выбранном элементе. Попробуйте получить дескриптор вновь выбранного ListViewItem, используя ListView.ItemContainerGenerator.ContainerFromItem (newSelectedItem), а затем вызовите focus () для него. Мне было бы очень интересно узнать, работает ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...