Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2016, 12:24   #1
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
Восклицание Живой поиск System.Windows.Controls.ComboBox C# WPF

Добрый день/вечер, столкнулся с задачей сделать контекстный поиск в Windows.Controls.ComboBox. Поиск производится по любому вхождению. Например имеем: Вася, Федя, Вика Набираем "в", получаем: Вася, Вика; "ва" остается Вася; "дя" - Федя. Надеюсь смысл понятен. Доработал каласс ComboBox:

Код:
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using ProgrammingWeapons;

namespace Telemetria.UI
{
    public class ComboBoxFinder : ComboBox
    {
        private bool _isAutoFilter = true;
        public bool IsAutoFilter {
            get { return _isAutoFilter; }
            set { _isAutoFilter = value; }
        }

        private readonly List<object> _fullList;
        private string _filterText { get; set; }
        public ComboBoxFinder() {
            IsTextSearchEnabled = false; // отключение автовыбора первого элемента, иначе не работает поиск
            _fullList = new List<object>();
            _filterText = "";

            KeyUp += (sender, args) => Filter(Text);
            KeyDown += (sender, args) => {
                if (_isAutoFilter) IsDropDownOpen = true;
                Filter(Text);
            };
            SelectionChanged += (sender, args) => {
                    Filter("");
            };
        }

        public void Filter(string text) {
            if (!_isAutoFilter) return;
            if (text.IsNull()) return;

            _filterText = text;
            if (_fullList.Count < 1)
                foreach (var isc in Items.SourceCollection)
                    _fullList.Add(isc);

            var tmpSourceList = _fullList.Where(fl => fl != null && fl.ToString().ToUpper().Contains(_filterText.ToUpper())).ToList();
            ItemsSource = tmpSourceList;
        }
    }
}
Вроде как выполняется то что нужно, но работает как-то криво. Когда выбираешь первый раз элемент отображается в заголовка, начинаю печатать для второго поиска, первая буква печатается и потом исчезает, нужно вводить ее снова, после чего все фильтруется нормально. Или второй вариант при попытке напечатать текст выскакивает выбранный элемент и данные не фильтруются.

Какой вариант бага когда появляется пока не пойму. Подскажите куда смотреть. WinForms использовать нельзя, т.к. не вписывается в проект. В интернете ничего не нарыл, такое ощущение что все под WinForms пишут (
DennerV вне форума Ответить с цитированием
Старый 01.08.2016, 12:49   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от DennerV Посмотреть сообщение
В интернете ничего не нарыл, такое ощущение что все под WinForms пишут (
Да ну?
https://www.google.com/search?q=wpf+...plete+combobox
Цитата:
Сообщение от DennerV Посмотреть сообщение
Или второй вариант при попытке напечатать текст выскакивает выбранный элемент и данные не фильтруются.
Наверно так стандартный комбобокс работает. Если нельзя отключить, то видимо только делать не на основе комбобокса.

Но вроде ж есть https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
http://weblogs.thinktecture.com/cnag...-with-wpf.html
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.08.2016, 09:30   #3
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Поиск в ComboBox есть, но он находит первое совпадение, а мне нужен фильтр, чтоб выпадали все найденные варианты

Попробую AutoCompleteBox из WPFToolkit, немного не то но может что получится
DennerV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# WPF MVVM Editable Combobox in DataGrid Famine WPF, UWP, WinRT, XAML 1 22.09.2014 17:11
Живой поиск VitStar03 PHP 2 31.07.2013 17:18
Ошибка Ambiguity between '_fastcall System::operator +(int,const System::Variant &)' and '_fastcall System::opera Jawner C++ Builder 1 12.04.2012 09:58