DotNetKit.Wpf.AutoCompleteComboBox
DotNetKit.Wpf.AutoCompleteComboBox copied to clipboard
ComboBox with filtering (auto-complete) for WPF
AutoCompleteComboBox for WPF
Provides a lightweight combobox with filtering (auto-complete).
Screenshot

Usage
Declare XML namespace.
<Window
...
xmlns:dotNetKitControls="clr-namespace:DotNetKit.Windows.Controls;assembly=DotNetKit.Wpf.AutoCompleteComboBox"
... >
Then you can use AutoCompleteComboBox. It's like a normal ComboBox because of inheritance.
<dotNetKitControls:AutoCompleteComboBox
SelectedValuePath="Id"
TextSearch.TextPath="Name"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
SelectedValue="{Binding SelectedValue}"
/>
Note that:
- Set a property path to
TextSearch.TextPathproperty.- The path leads to a property whose getter produces a string value to identify items. For example, assume each item is an instance of
Person, which hasNameproperty, and the property path is "Name". If the user input "va", the combobox filters the items to remove ones (persons) whoseNamedon't contain "va". - No support for
TextSeach.Text.
- The path leads to a property whose getter produces a string value to identify items. For example, assume each item is an instance of
- Don't use
ComboBox.Itemsproperty directly. UseItemsSourceinstead. - Although the Demo project uses DataTemplate to display items, you can also use
DisplayMemberPath.
Configuration
This library works fine in the default setting, however, it also provides how to configure.
- Define a class derived from DotNetKit.Windows.Controls.AutoCompleteComboBoxSetting to override some of properties.
- Set the instance to
AutoCompleteComboBox.Settingproperty.
<dotNetKitControls:AutoCompleteComboBox
Setting="..."
...
/>
- Or set to
AutoCompleteComboBoxSetting.Defaultto apply to all comboboxes.
Performance
Filtering allows you to add a lot of items to a combobox without loss of usability, however, that makes the performance poor. To get rid of the issue, we recommend you to use VirtualizingStackPanel as the panel.
Use ItemsPanel property:
<dotNetKitControls:AutoCompleteComboBox ...>
<dotNetKitControls:AutoCompleteComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</dotNetKitControls:AutoCompleteComboBox.ItemsPanel>
</dotNetKitControls:AutoCompleteComboBox>
or declare a style in resources as the Demo app does.
See also WPF: Using a VirtualizingStackPanel to Improve ComboBox Performance for more detailed explanation.