Как сделать поиск в wpf

В этом описании приводится пример использования элемента управления ComboBox, разработанный для легкого управления содержанием выпадающего списка. Приведенная модификация ComboBox позволяет применять критерии на единицы списка.

как сделать поиск в wpf

С чего все началось?

Все мы встречались с элементом управления “Выпадающий список”. Где его только не встретишь: странички в нашем браузере, игры, программы по работе с текстом, формы настройки параметров системы, форма выбора сотрудника в 1С, GUI клиентов электронной почты, форма выбора разработчика в TeamFoundationServer и т.д. Самые разные программы применяют его в своих решениях.

И все хорошо до тех пор, пока элементов в списке не слишком много, скажем меньше 20. А во что превращается выпадающий список, когда число, к примеру, сотрудников становиться 200, 500, 1000. Сделать выбор из такого списка становится проблемой. И эту проблему современные “выпадающие списки” обходят. Один из способов выводить элементы списка упорядоченно по алфавиту. Но более изящный подход к проблеме заключается в том, чтобы предоставить пользователю возможность редактировать текстовое поле ComboBox. Так выпадающий список в TFS и 1С сам предлагает варианты, когда пользователь набирает правильное начало фамилии какого-либо разработчика.

Все же в этом способе тоже есть небольшой недостаток. Предположим, у бухгалтера в организации 1000 сотрудников. Перед бухгалтером стоит задача вывести информацию о некотором сотруднике Петре Рудольфовиче, фамилию которого она не помнит, но если ей эту фамилию озвучат, то она сразу ее вспомнит. И что ей делать? Ведь в 1С ComboBox выберет Петра Рудольфовича только если, бухгалтер введет в текстовое поле первую часть его фамилии.

Предлагается оставлять в выпадающем списке только те элементы, которые удовлетворяют некоторому условию сравнения с введенной текстовом поле строкой

Эволюция ComboBox

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DropDownFilterProject.Samples
{
public class Person
{
public String FirstName { set; get; }
public String NameByFather { set; get; }
public String Surname { set; get; }
public String FullName { get { return String.Format("{0} {1} {2}", Surname, FirstName, NameByFather); } }
}
}

Свойство FullName будет тем самым ключевым атрибутом в поиске. Создаем самую простую форму для бухгалтера MainForm:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DropDownFilterProject" x:Class="DropDownFilterProject.MainWindow"
xmlns:sam="clr-namespace:DropDownFilterProject.Samples"

Title="MainWindow" Height="400" Width="1096.344">
<Grid>
<local:FilterComboBox
x:Name="comboBox"
IsEditable="True"
TextSearch.TextPath="FullName"
HorizontalAlignment="Left"
Margin="161,123,0,0"
VerticalAlignment="Top"
Width="647"
Height="39">
<local:FilterComboBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="LightYellow" BorderThickness="1.5" Width="{Binding ElementName=comboBox, Path=Width}">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock FontWeight="Thin">Фамилия:</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding Surname}" ></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontWeight="Thin">Имя:</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding FirstName}"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontWeight="Thin">Отчество:</TextBlock>
<TextBlock FontWeight="Bold" Text="{Binding NameByFather}"></TextBlock>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
</local:FilterComboBox.ItemTemplate>
<local:FilterComboBox.ItemsSource>
<sam:PersonCollection></sam:PersonCollection>
</local:FilterComboBox.ItemsSource>
</local:FilterComboBox>
<GroupBox Header="Выбор сотрудника:" HorizontalAlignment="Left" Margin="149,97,0,0" VerticalAlignment="Top" Height="77" Width="679"/>
<Button Content="Открыть зарплатный график сотрудника" HorizontalAlignment="Left" Margin="149,195,0,0" VerticalAlignment="Top" Width="320" Height="34"/>
</Grid>
</Window>

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

Примеры использования:

Приведенная реализация позволяет задавать различные способы фильтрации списка, для этого служит свойство Filter. По умолчанию отображаются все элементы, в которых входит в качестве подстроки текст из редактируемого поля. Также можно дополнять свойство FullName различными параметрами. Например:

1. Свойство FullName можно дополнить местом рождения, и фильтровать, к примеру, по «Новосибирск». Или дополнить должностью и                     фильтровать по «начальник отдела»

2. Фильтр по умолчанию можно заменить собственным, который, к примеру латинские буквы переводит в русские, а потом уже проверяет вхождение. Или написать фильтр, который слово «Heljkma» сначала транслирует в «Рудольф», а потом проверяет вхождение.

Ссылка на.NET проект:

 https://drive.google.com/folderview?id=0B08rWwFcshTwUWxCdV9mamdvMTg&usp=sharing

Если Вам понравилась статья, проголосуйте за нее

Голосов: 3  loading...
Источник: http://www.quizful.net/post/FilterComboBoxWpf

Закрыть ... [X]

C# - Как сделать поиск по DataGrid - Stack Overflow на русском Внутривидовые отношения что это такое

Как сделать поиск в wpf Поиск по бд через TextBox на C# - Базы данных (T, LinqToSql)
Как сделать поиск в wpf Как осуществить поиск в DataGrid? - C WPF, UWP и Silverlight
Как сделать поиск в wpf TextBlock с подсветкой текста (WPF) / Хабрахабр
Как сделать поиск в wpf NET компонент Tree View с поиском / Хабрахабр
Как сделать поиск в wpf Как сделать поиск по listBox C# - Форум CodeNet
Как сделать поиск в wpf Руководство C# Регулярные выражения
Как сделать поиск в wpf Фильтрующий ComboBox на Wpf - Quizful
(енот Ракета, Грут, Звездный лорд Ракета Енот) More Hairstyles at Dragon Age - mods and community Белая кошка в доме: особенности, характер и уход Вязание цветов крючком - цветочная поляна - HANDMADE -ИДЕИ - СЕКРЕТЫ Как приготовить куриную грудку - вкусную и сочную