Как сделать текстовый поиск в DropDown ComboBox с IsEditable = false - PullRequest
0 голосов
/ 27 августа 2018

У меня есть ComboBox с IsEditable = false. Когда пользователь выпадает из списка, я бы хотел поддержать его в поиске нужного элемента, прокрутив до первого элемента, который соответствует букве, которую вводит пользователь.

Поэтому, когда DropDown открыт и пользователь набирает «S», я бы хотел, чтобы он прокрутил до первого элемента (в моем случае: customer), имя которого начинается с «S».

Я не могу использовать встроенный текстовый поиск, потому что IsEditable в ComboBox имеет значение false. Пользователь может выбрать только одно из предложенных значений (клиенты).

Как я могу сделать поиск текста в любом случае? Вот мой код:

<ComboBox x:Name="cmbCustomer" 
        ItemsSource="{Binding LstAllCustomers, Mode=TwoWay}"
        SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
        ItemContainerStyle="{StaticResource customerListStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="2" Text="{Binding ID}"/>
                <TextBlock Margin="2" Text="{Binding LastName}"/>
                <TextBlock Margin="2" Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

1 Ответ

0 голосов
/ 27 августа 2018

Установите для свойства IsTextSearchEnabled значение true, а для присоединенного свойства TextSearch.TextPath - "LastName" или "FirstName" или как там будет называться ваше свойство:

<ComboBox x:Name="cmbCustomer" 
              ItemsSource="{Binding LstAllCustomers, Mode=TwoWay}"
              SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
              ItemContainerStyle="{StaticResource customerListStyle}"
              IsTextSearchEnabled="True" TextSearch.TextPath="LastName">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="2" Text="{Binding ID}"/>
                <TextBlock Margin="2" Text="{Binding LastName}"/>
                <TextBlock Margin="2" Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Это должно работать, даже если вы не установите для свойства IsEnabled значение true, предполагая, что ваш класс Customer действительно имеет свойство LastName.

...