Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > WPF, UWP, WinRT, XAML
Регистрация

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 01.08.2016, 13:24   #1
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
Репутация: 10
Восклицание Живой поиск 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, 13:49   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 12,821
Репутация: 2542

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от 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
Alex11223 на форуме   Ответить с цитированием
Старый 02.08.2016, 10:30   #3
DennerV
Пользователь
 
Регистрация: 14.05.2009
Сообщений: 44
Репутация: 10
По умолчанию

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

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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




11:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru