diff --git a/src/Avalonia.Controls/AutoCompleteBox.cs b/src/Avalonia.Controls/AutoCompleteBox.cs
index c9b50a46fd..c119fd1964 100644
--- a/src/Avalonia.Controls/AutoCompleteBox.cs
+++ b/src/Avalonia.Controls/AutoCompleteBox.cs
@@ -242,7 +242,7 @@ namespace Avalonia.Controls
///
/// The type used for filtering the
/// .
- /// At the moment this type known only as a string.
+ /// This type can be either a string or an object.
///
public delegate string AutoCompleteSelector(string search, T item);
@@ -383,6 +383,7 @@ namespace Avalonia.Controls
private AutoCompleteFilterPredicate _itemFilter;
private AutoCompleteFilterPredicate _textFilter = AutoCompleteSearch.GetFilter(AutoCompleteFilterMode.StartsWith);
+ private AutoCompleteSelector _itemSelector;
private AutoCompleteSelector _textSelector;
public static readonly RoutedEvent SelectionChangedEvent =
@@ -551,6 +552,20 @@ namespace Avalonia.Controls
(o, v) => o.TextFilter = v,
unsetValue: AutoCompleteSearch.GetFilter(AutoCompleteFilterMode.StartsWith));
+ ///
+ /// Identifies the
+ ///
+ /// dependency property.
+ ///
+ /// The identifier for the
+ ///
+ /// dependency property.
+ public static readonly DirectProperty> ItemSelectorProperty =
+ AvaloniaProperty.RegisterDirect>(
+ nameof(ItemSelector),
+ o => o.ItemSelector,
+ (o, v) => o.ItemSelector = v);
+
///
/// Identifies the
///
@@ -1100,18 +1115,32 @@ namespace Avalonia.Controls
///
/// Gets or sets the custom method that combines the user-entered
- /// text to and one of the items specified by the
+ /// text and one of the items specified by the
/// .
///
///
/// The custom method that combines the user-entered
- /// text to and one of the items specified by the
+ /// text and one of the items specified by the
/// .
///
- ///
- /// The AutoCompleteMode is automatically set to Custom if you set
- /// the TextSelector property.
- ///
+ public AutoCompleteSelector ItemSelector
+ {
+ get { return _itemSelector; }
+ set { SetAndRaise(ItemSelectorProperty, ref _itemSelector, value); }
+ }
+
+ ///
+ /// Gets or sets the custom method that combines the user-entered
+ /// text and one of the items specified by the
+ ///
+ /// in a text-based way.
+ ///
+ ///
+ /// The custom method that combines the user-entered
+ /// text and one of the items specified by the
+ ///
+ /// in a text-based way.
+ ///
public AutoCompleteSelector TextSelector
{
get { return _textSelector; }
@@ -2386,10 +2415,17 @@ namespace Avalonia.Controls
{
text = SearchText;
}
+ else if (TextSelector != null)
+ {
+ text = TextSelector(SearchText, FormatValue(newItem, true));
+ }
+ else if (ItemSelector != null)
+ {
+ text = ItemSelector(SearchText, newItem);
+ }
else
{
- string formattedValue = FormatValue(newItem, true);
- text = TextSelector == null ? formattedValue : TextSelector(SearchText, formattedValue);
+ text = FormatValue(newItem, true);
}
// Update the Text property and the TextBox values