Provides a lightweight combobox with filtering (auto-complete).
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.TextPath
property.- 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 hasName
property, and the property path is "Name". If the user input "va", the combobox filters the items to remove ones (persons) whoseName
don'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.Items
property directly. UseItemsSource
instead. - Although the Demo project uses DataTemplate to display items, you can also use
DisplayMemberPath
.
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.Setting
property.
<dotNetKitControls:AutoCompleteComboBox
Setting="..."
...
/>
- Or set to
AutoCompleteComboBoxSetting.Default
to apply to all comboboxes.
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.