2014-11-10 4 views
0

У меня есть элемент управления combo box в моем приложении MVVM WPF, и я пытаюсь включить serach в поле. Это означает, что всякий раз, когда пользователь вводит что-либо в поле cmb, он отображает эти записи pertainig.WPF combobox пользовательский контроль текстового поиска функциональность

Я использую код ниже, но не могу видеть это работает.

<ComboBox x:Class="ABC.Selector" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:ABC.ViewModels" 
     TextSearch.TextPath ="{Binding Name}" IsEditable="True"> 
> 
<ComboBox.ItemTemplate> 
    <DataTemplate DataType="{x:Type vm:MyViewModel}"> 
     <StackPanel Orientation="Horizontal"> 
      <Image Source="{Binding Image}" Margin="0 0 5 0"/> 
      <TextBlock Text="{Binding Name}"/> 
     </StackPanel> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

Эта функция работает с кодом ниже:

<ComboBox Grid.Column="3" Grid.Row="1" HorizontalAlignment="Stretch" Name="cmb" 
       VerticalAlignment="Stretch" Height="Auto" Grid.ColumnSpan="9" 
       ItemsSource="{Binding Details}" 
       SelectedItem="{Binding Selected, Mode=TwoWay}"> 
     <TextSearch.TextPath>Name</TextSearch.TextPath> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock DataContext="{Binding}"> 
         <TextBlock.Text> 
          <MultiBinding StringFormat="{}{0} - {1}"> 
           <Binding Path="Name" /> 
           <Binding Path="LongName" /> 
          </MultiBinding> 
         </TextBlock.Text> 
       </TextBlock> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

Любая идея, как включить это в первом блоке кода?

+2

У вас есть вопросы? –

+0

Да. Я хочу включить это в свой первый блок кода. – user2519971

ответ

0

TextPath не ожидает привязки к фактическому значению; он ожидает название объекта для поиска. Вы должны установить TextSearch.TextPath="Name".

+0

Я сделал TextSearch.TextPath = «Имя», но он не работает. что может быть уловкой? – user2519971

+0

Каждый элемент в вашей коллекции 'Details' имеет свойство« Name », да? И это свойство, которое вы хотите искать? Если это так, это должно сработать. –

+0

В идеале это должно работать, но это совсем не работает. Я не уверен, где мне не хватает. – user2519971

0
        <DataGridTemplateColumn.CellTemplate> 
             <DataTemplate> 
              <ComboBox x:Name="vendorCombo" ItemsSource="{Binding DataContext.VendorMasterSource, RelativeSource={RelativeSource AncestorType=Page}}"              
               SelectedValue="{Binding VendorNo,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
               SelectedValuePath="VENDOR_MASTER_ID" 
                 behaviour:ComboBoxSeletionChangedBehaviour.ComboBoxSeletionChangedCommand= 
                "{Binding DataContext.SelectionChangedCommand, RelativeSource={RelativeSource AncestorType=Page}}" TextSearch.TextPath="NAME" IsTextSearchEnabled="True" IsEditable="True" > 
               <ComboBox.ItemTemplate> 
                <DataTemplate> 
                 <StackPanel Orientation="Horizontal"> 
                  <TextBlock Text="{Binding Path=NUMBER}"/> 
                  <TextBlock Text=" - "/> 
                  <TextBlock Text="{Binding Path=NAME}"/> 
                 </StackPanel> 
                </DataTemplate> 
               </ComboBox.ItemTemplate> 
              </ComboBox> 
             </DataTemplate> 
            </DataGridTemplateColumn.CellTemplate> 
           </DataGridTemplateColumn> 
+0

Это может помочь! –

+1

Не могли бы вы добавить объяснение своего ответа? – phuzi

+0

@phuzi уверен, что я могу, Используйте эти три, чтобы combobox работал как окно поиска. 'TextSearch.TextPath =" NAME "IsTextSearchEnabled =" True "IsEditable =" True "', и это должно включить поиск для вас !. –

Смежные вопросы