Фільтруючий ComboBox на Wpf

З чого все почалося?

Всі ми зустрічалися з елементом управління "Випадаючий список". Де його тільки не зустрінеш: сторінки в нашому браузері, ігри, програми роботи з текстом, форми налаштування параметрів системи, форма вибору співробітника в 1С, GUI клієнтів електронної пошти, форма вибору розробника в Team Foundation Server і т.д. Найрізноманітніші програми застосовують його у своїх рішеннях.

І все добре до тих пір, поки елементів у списку не надто багато, скажімо менше 20. А на що перетворюється список, що випадає, коли число, наприклад, співробітників ставати 200, 500, 1000. Зробити вибір з такого списку стає проблемою. І цю проблему сучасні списки, що випадають, оминають. Один із способів виводити елементи списку впорядковано за абеткою. Але більш витончений підхід до проблеми полягає в тому, щоб надати користувачеві можливість редагувати текстове поле ComboBox. Так список, що випадає в TFS і 1С сам пропонує варіанти, коли користувач набирає правильний початок прізвища будь-якого розробника.

Все ж таки в цьому способі теж є невеликий недолік. Припустимо, бухгалтер у організації має 1000 співробітників. Перед бухгалтером стоїть завдання вивести інформацію про деякого співробітника Петра Рудольфовича, прізвище якого воно не пам'ятає, але якщо йому це прізвище озвучать, то воно відразу його згадає. І що їй робити? Адже в 1С ComboBox вибере Петра Рудольфовича лише якщо бухгалтер введе в текстове поле першу частину його прізвища.

Пропонується залишати у списку, що випадає, тільки ті елементи, які задовольняють певній умові порівняння з введеним текстовим поле рядком

ЕволюціяComboBox

Продовжимо приклад із бухгалтером та Петром Рудольфовичем. Сутність співробітників описуватимемо класомPerson :

Властивість FullName буде тим самим ключовим атрибутом у пошуку. Створюємо найпростішу форму для бухгалтера MainForm:

Знаючи ім'я та по батькові Петра Рудольфовича і забувши його прізвище, бухгалтер введе Рудольфович і відразу побачить шуканого Крамського.

Приклади використання:

Наведена реалізація дозволяє задавати різні способи фільтрації списку, для цього є властивість Filter . За замовчуванням відображаються всі елементи, в яких входить як підрядок текст з поля, що редагується. Також можна доповнювати властивості FullName різними параметрами. Наприклад:

1. Властивість FullName можна доповнити місцем народження, і фільтрувати, наприклад, «Новосибірськ». Або доповнити посадою та фільтрувати за «начальником відділу»

2. Фільтр за замовчуванням можна замінити на власний, який, наприклад, латинські літери перекладає в українські, а потім уже перевіряє входження. Або написати фільтр, який слово Heljkma спочатку транслює в Рудольф, а потім перевіряє входження.

Посилання на .NET проект:

Голосів: 4 Голосувати