Как применить поиск в редактируемом поле со списком в WPF с помощью MVVM

У меня есть редактируемое поле со списком в WPF. который имеет список порядкового номера. Мне нужно реализовать приведенный ниже сценарий в моем коде. Пользователь может ввести начальный номер заказа, и система предложит номер закрывающего ордера, доступный в раскрывающемся списке.

Кто-нибудь может подсказать, как это сделать?

В моей модели просмотра я написал:

        public void _fillREOrderNumbers()   
        {
            List<FinishedReprintingOrderNumber> orders = _finishedProductReprintService.GetFinishedProductReprintbyOrder().ToList();
            foreach (var item in orders)
            {
                ReOrders.Add(item);
            }
        }

Это загрузка номера заказа в раскрывающемся списке.

Просмотр или XAML:

<ComboBox x:Name = "cbOFab" HorizontalAlignment = "Left" Margin = "373,81,0,0" 
 VerticalAlignment = "Top" Width = "262" IsEditable = "True"  
 ItemsSource = "{Binding ReOrders, Mode=TwoWay}"  DisplayMemberPath = "codOrder" SelectedItem = "{Binding 
 ReSelectedOrder}" Background = "{DynamicResource dgridRowColor}" />

До сих пор, Я могу указать номер заказа в поле со списком, но не знаю, как искать в нем.

Возможный дубликат Автозаполнение TextBox в WPF

Anton Gorbunov 06.08.2018 12:46

Мне нужно использовать ComboBOX вместо TextBox ..

Naman 06.08.2018 13:00

Вероятно, вы ищете IsTextSearchEnabled = "True"

Kaspar 06.08.2018 14:09

kaspar: Я хочу, чтобы в моем поле со списком отображался номер заказа, введенный пользователем. Не полный список, который выбирается.

Naman 06.08.2018 14:18

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

Kaspar 06.08.2018 14:19

еще одна вещь, пользователь, начнет печатать заказ в каком-нибудь текстовом поле?

Kaspar 06.08.2018 14:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
1 640
1

Ответы 1

Таким образом я реализовал фильтрацию элементов в ComboBox.

Вот XAML:

<ComboBox
MinWidth = "200"
ItemsSource = "{Binding Path=Shops.View, RelativeSource = {RelativeSource TemplatedParent}}" 
DisplayMemberPath = "NameExtended"
SelectedItem = "{Binding Path=SelectedShop, Mode=TwoWay, RelativeSource = {RelativeSource TemplatedParent}}"
IsTextSearchEnabled = "False"
IsEditable = "True"
IsDropDownOpen = "{Binding Path=ComboOpen, Mode=TwoWay, RelativeSource = {RelativeSource TemplatedParent}}"
StaysOpenOnEdit = "True"
Text = "{Binding Path=SearchText, Mode=TwoWay, RelativeSource = {RelativeSource TemplatedParent}}"
>
<i:Interaction.Triggers>
    <i:EventTrigger EventName = "KeyUp">
        <i:InvokeCommandAction 
            Command = "{Binding Path=FilterCommand, RelativeSource = {RelativeSource TemplatedParent}}" 
        />
    </i:EventTrigger>
</i:Interaction.Triggers>

Вам нужны все строки из IsTextSearchEnabled и ниже.

Когда вы нажимаете любую клавишу в поле со списком, оно открывается и фильтрует элементы в нем, используя свойство SearchText, привязанное к ComboBox.Text.

Вот код модели представления:

public string SearchText { get; set; }
private List<Shop> _shops;

protected void FilterShops()
    {
        ComboOpen = true;
        if (!string.IsNullOrEmpty(SearchText))
        {
            Shops.UpdateSource(_shops.Where(s => s.NameExtended.ToLower().Contains(SearchText.ToLower())));
        }
        else
        {
            Shops.UpdateSource(_shops);
        }
        OnPropertyChanged("Shops");
    }

Другие вопросы по теме