WPF Combobox Autocomplete TextSearch, например, содержит вместо «Начать с»

Я пытаюсь реализовать WPF Combobox Autocomplete TextSearch, например «Содержит» вместо «Начать с».

Пара тем вопросов есть, но конкретного решения не нашел.

Я следил за ответом @Evgenii: текстовый поиск WPF со списком с содержит

В методе SetText(элемент DependencyObject, строковый текст) значение параметра text всегда является строкой DeviceNumber. Так что мой текст там не отражается.

Вот мой собственный пример кода https://drive.google.com/open?id=1eqK5bh5SQJPxHeb-zzOuBHIpYapv-h18

Любая причина?

Кто-нибудь успешно реализовал текстовый поиск с содержит? Пожалуйста, направляйте.

Я благодарю вас за каждый ответ, который я получаю, но рабочий код очень ценен :)


person Metallic Skeleton    schedule 20.11.2019    source источник
comment
Спасибо @NawedNabiZada. Я попробовал это перед тем, как написать этот пост. Это не работало. Я только что попробовал еще раз, но не повезло.   -  person Metallic Skeleton    schedule 20.11.2019
comment
Ваш вопрос слишком широк, и я сомневаюсь, что кто-то приложит усилия, чтобы щелкнуть ссылку на диск Google, чтобы загрузить ваше решение. Я советую вам повторить код, указанный в приведенной выше ссылке, и задать вопросы относительно проблем, с которыми вы столкнетесь. Обязательно создайте минимальный воспроизводимый пример   -  person Nawed Nabi Zada    schedule 20.11.2019
comment
Никаких тяжелых чувств. Stackoverflow не является форумом для обсуждения, так как направляющие линии описывают ваш текущий вопрос слишком широко. Вам все еще нужно создать MCVE.   -  person Nawed Nabi Zada    schedule 20.11.2019


Ответы (2)


сделать настраиваемый элемент управления combobox.

public class SearchComboBox : ComboBox
{
    TextBox editableTextBox;

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        editableTextBox = GetTemplateChild("PART_EditableTextBox") as TextBox;

        editableTextBox.TextChanged += EditableTextBox_TextChanged;
    }

    private void EditableTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        ICollectionView ICV = ItemsSource as ICollectionView;

        if(ICV != null)
        {
            if (string.IsNullOrEmpty(editableTextBox.Text.Trim()))
                ICV.Filter = null;
            else
                ICV.Filter = new Predicate<object>(i => ((Equipment)i).equipmentLabel.Contains(editableTextBox.Text));

            IsDropDownOpen = true;
        }

    }
}

изменить код EquipmentScreenViewModel. добавить свойство типа ICollectionView

public  class EquipmentScreenViewModel
{
    public string SelectedEquipmentRego { get; set; }
    public ObservableCollection<Equipment> AllEquipments { get; set; }

    private ICollectionView _allEquipCollection = null;

    public ICollectionView AllEquipCollection
    {
        get
        {
            if (_allEquipCollection == null && AllEquipments != null)
            {
                _allEquipCollection = CollectionViewSource.GetDefaultView(AllEquipments);
            }

            return _allEquipCollection;
        }
    }
}

XAML

<Grid>
    <local:SearchComboBox x:Name="cmbAlternativeAsset" 
                            Width="200" IsEditable="True" 
                            FontSize="12" Foreground="#494949"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Stretch"   
                            SelectedItem="{Binding SelectedEquipmentRego, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                            ItemsSource="{Binding AllEquipCollection}" SelectedValuePath="equipmentRego"
                            DisplayMemberPath="equipmentLabel" IsTextSearchEnabled="False"
        />
</Grid>

Привязка ItemsSource к CollectionView и IsTextSearchEnabled false. Удачи

person Byoung Sam Moon    schedule 20.11.2019

я рекомендую использовать AutoCompleteBox, это похоже на ComboBox, у него есть ItemsSource и SelectedItem и все как ComboBox

вы можете использовать его свойство AutoCompleteBox.FilterMode, которое принимает перечисление AutoCompleteFilterMode, перечисления включают: Contains, ContainsCaseSensitive, ContainsOrdinal и другие полезные... вот как вы его используете:

https://www.broculos.net/2014/04/wpf-autocompletebox-autocomplete-text.html, а здесь пример использования режима фильтра:

https://docs.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/dd833103(v=vs.95)?redirectedfrom=MSDN

person OMR    schedule 20.11.2019