WPF - выберите значение ComboBox, набрав при использовании DataTemplate - PullRequest
3 голосов
/ 09 августа 2011

У меня есть поле со списком в wpf, которое привязано к некоторому свойству (другому объекту).Поскольку мне нужно показать два свойства этого объекта, я использовал DataTemplate внутри выпадающего списка.Теперь, когда фокус находится в фокусе, я не могу выбрать какое-либо значение, набрав несколько начальных букв (без DataTemplate это возможно).

<ComboBox Height="23" HorizontalAlignment="Left" Margin="104,14,0,0" Name="tipDokumentaCombo" VerticalAlignment="Top" Width="241" TabIndex="0" ItemsSource="{Binding Path=TipoviDokumenta}" SelectedValue="{Binding Path=Potvrda.Tip}" SelectedValuePath="Tip" SelectionChanged="tipDokumentaCombo_SelectionChanged">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Tip}" />
                        <TextBlock Text=" (" />
                        <TextBlock Text="{Binding Path=OpisDokumenta}" />
                        <TextBlock Text=")" />
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Установите TextSearch.TextPath для свойства, которое нужно искать.

Обновление
Поскольку вышеприведенное решение, похоже, не работает для вас, попробуйте вручную задать текст поиска для контейнера:

<ComboBox.ItemContainerStyle>    
   <Style TargetType="{x:Type ComboBoxItem}">        
          <Setter Property="TextSearch.Text" Value="{Binding Tip}" />            
    </Style>
</ComboBox.ItemContainerStyle>
0 голосов
/ 22 декабря 2015

Основываясь на обсуждении комментариев, решение, которое работает, заключается в добавлении IsTextSearchEnabled="True" и TextSearch.TextPath="Tip" в тег ComboBox.

Например (переписывание примера кода вопроса - удаление некоторыхбесполезно для примера кода для уменьшения сложности)

<ComboBox Name="tipDokumentaCombo" TabIndex="0" ItemsSource="{Binding Path=TipoviDokumenta}" SelectedValue="{Binding Path=Potvrda.Tip}" SelectedValuePath="Tip" SelectionChanged="tipDokumentaCombo_SelectionChanged" IsTextSearchEnabled="True" TextSearch.TextPath="Tip">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Tip}" />
                <TextBlock Text=" (" />
                <TextBlock Text="{Binding Path=OpisDokumenta}" />
                <TextBlock Text=")" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Отказ от ответственности: Я не оригинальный автор.Этот ответ сфабрикован из существующих комментариев.Атрибуция должна быть предоставлена ​​ @ mersadk , которые публикуют большинство деталей этого ответа в комментариях.Я проверяю его и проверяю, что это работает в моей (аналогичной) среде - проблема.

0 голосов
/ 04 января 2012

Добавьте DisplayMemberPath к свойству, с которым должен работать поиск.

Настройка DisplayMemberPath работала для меня даже при наличии элемента шаблона.

...