WPF: получение списка, чтобы оставаться на месте - PullRequest
0 голосов
/ 18 сентября 2009

У меня есть ситуация, когда у меня есть ListBox, который заполняется из фонового потока (это адресная книга, а данные поступают из AD).

Проблема заключается в том, что, поскольку список отсортирован (с использованием CollectionViewSource) и также доступен пользователю, когда извлекается больше данных, он подпрыгивает повсюду, поскольку новые элементы вставляются в различные места в списке. Таким образом, он доступен для пользователя, но в основном непригоден для использования, так как выбор пользователя остается вне поля зрения.

Есть ли способ сохранить Focus для выбранного элемента и сохранить выделение, даже если элементы вставляются выше и ниже выделения из фоновой цепочки? Я бы предпочел не сортировать на сервере, что, как я понимаю, может быть плохо, когда дело доходит до AD.

1 Ответ

0 голосов
/ 18 сентября 2009

Я собираюсь ответить на это с точки зрения дизайна пользовательского интерфейса, а не с точки зрения технического кода. (Я уверен, что у кого-то еще будет возможность, чтобы в окне списка отображался выбранный элемент)

Я бы сказал, что использование списка со значительными объемами данных, добавляемых в него, практически невозможно. Скажем так, вы получаете его, чтобы держать выбор в поле зрения, а если пользователь все еще ищет требуемый элемент, вы не сможете сохранить его тогда.

Во-первых, если ожидаемое общее время загрузки составляет менее 10 секунд, вы можете просто отключить окно списка, пока загрузка не будет завершена. (Очевидно, он затенен с помощью вращающейся анимации или чего-то такого, чтобы пользователь мог видеть, что он что-то делает.) Я предполагаю, что вы уже отклонили эту опцию, иначе вы, вероятно, не спросили бы здесь. Но я думаю, что это стоит рассмотреть. Если время загрузки слишком мало, подумайте, действительно ли ваши пользователи получат что-нибудь, просматривая список, пока он еще загружается.

Во-вторых, я бы предложил, чтобы вы нашли способ ограничить содержимое списка, чтобы в каждый момент отображались только небольшие количества. Вы можете сделать это, только отображая имена, начинающиеся с одной буквы алфавита (вместе с элементом управления буквой). Или вы могли бы предоставить текстовое поле для ввода фильтра вверху, где пользователь мог бы набрать первые несколько букв, а в списке отобразились бы только имена, начинающиеся с этих букв. Это позволит пользователю напечатать «sa», и в поле со списком отобразятся «sam», «samantha», «sacha» и т. Д. Теперь у вас есть только небольшое количество элементов в списке, поэтому вам не нужно беспокоиться об этом, прыгая вокруг. Если количество элементов в списке становится слишком большим (из-за загрузки в фоновом потоке) и список выходит за пределы высоты поля, пользователь может просто ввести дополнительную букву для дальнейшей фильтрации списка.

Извините, если это не совсем то, что вы хотели, но я подумал, что стоило бы поднять альтернативный дизайн, если бы вы его пропустили.

...