|
|
|
@ -242,7 +242,7 @@ namespace Avalonia.Controls |
|
|
|
/// <typeparam name="T">
|
|
|
|
/// The type used for filtering the
|
|
|
|
/// <see cref="T:Avalonia.Controls.AutoCompleteBox" />.
|
|
|
|
/// At the moment this type known only as a string.
|
|
|
|
/// This type can be either a string or an object.
|
|
|
|
/// </typeparam>
|
|
|
|
public delegate string AutoCompleteSelector<T>(string search, T item); |
|
|
|
|
|
|
|
@ -383,6 +383,7 @@ namespace Avalonia.Controls |
|
|
|
private AutoCompleteFilterPredicate<object> _itemFilter; |
|
|
|
private AutoCompleteFilterPredicate<string> _textFilter = AutoCompleteSearch.GetFilter(AutoCompleteFilterMode.StartsWith); |
|
|
|
|
|
|
|
private AutoCompleteSelector<object> _itemSelector; |
|
|
|
private AutoCompleteSelector<string> _textSelector; |
|
|
|
|
|
|
|
public static readonly RoutedEvent<SelectionChangedEventArgs> SelectionChangedEvent = |
|
|
|
@ -551,6 +552,20 @@ namespace Avalonia.Controls |
|
|
|
(o, v) => o.TextFilter = v, |
|
|
|
unsetValue: AutoCompleteSearch.GetFilter(AutoCompleteFilterMode.StartsWith)); |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Identifies the
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemSelector" />
|
|
|
|
/// dependency property.
|
|
|
|
/// </summary>
|
|
|
|
/// <value>The identifier for the
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemSelector" />
|
|
|
|
/// dependency property.</value>
|
|
|
|
public static readonly DirectProperty<AutoCompleteBox, AutoCompleteSelector<object>> ItemSelectorProperty = |
|
|
|
AvaloniaProperty.RegisterDirect<AutoCompleteBox, AutoCompleteSelector<object>>( |
|
|
|
nameof(ItemSelector), |
|
|
|
o => o.ItemSelector, |
|
|
|
(o, v) => o.ItemSelector = v); |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Identifies the
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.TextSelector" />
|
|
|
|
@ -1100,18 +1115,32 @@ namespace Avalonia.Controls |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 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
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemsSource" />.
|
|
|
|
/// </summary>
|
|
|
|
/// <value>
|
|
|
|
/// 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
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemsSource" />.
|
|
|
|
/// </value>
|
|
|
|
/// <remarks>
|
|
|
|
/// The AutoCompleteMode is automatically set to Custom if you set
|
|
|
|
/// the TextSelector property.
|
|
|
|
/// </remarks>
|
|
|
|
public AutoCompleteSelector<object> ItemSelector |
|
|
|
{ |
|
|
|
get { return _itemSelector; } |
|
|
|
set { SetAndRaise(ItemSelectorProperty, ref _itemSelector, value); } |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the custom method that combines the user-entered
|
|
|
|
/// text and one of the items specified by the
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemsSource" />
|
|
|
|
/// in a text-based way.
|
|
|
|
/// </summary>
|
|
|
|
/// <value>
|
|
|
|
/// The custom method that combines the user-entered
|
|
|
|
/// text and one of the items specified by the
|
|
|
|
/// <see cref="P:Avalonia.Controls.AutoCompleteBox.ItemsSource" />
|
|
|
|
/// in a text-based way.
|
|
|
|
/// </value>
|
|
|
|
public AutoCompleteSelector<string> 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
|
|
|
|
|