Browse Source

Merge pull request #8715 from workgroupengineering/fixes/Controls/AutoCompleteBox

fix(AutoCompleteBox):  PopulateDropDown handler is not unregister when MinimumPopulateDelay is set to Zero
pull/8724/head
Max Katz 4 years ago
committed by GitHub
parent
commit
9750dedcd1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      src/Avalonia.Controls/AutoCompleteBox.cs

11
src/Avalonia.Controls/AutoCompleteBox.cs

@ -392,6 +392,8 @@ namespace Avalonia.Controls
private AutoCompleteSelector<object>? _itemSelector; private AutoCompleteSelector<object>? _itemSelector;
private AutoCompleteSelector<string?>? _textSelector; private AutoCompleteSelector<string?>? _textSelector;
private readonly EventHandler _populateDropDownHandler;
public static readonly RoutedEvent<SelectionChangedEventArgs> SelectionChangedEvent = public static readonly RoutedEvent<SelectionChangedEventArgs> SelectionChangedEvent =
RoutedEvent.Register<SelectionChangedEventArgs>(nameof(SelectionChanged), RoutingStrategies.Bubble, typeof(AutoCompleteBox)); RoutedEvent.Register<SelectionChangedEventArgs>(nameof(SelectionChanged), RoutingStrategies.Bubble, typeof(AutoCompleteBox));
@ -668,6 +670,7 @@ namespace Avalonia.Controls
if (newValue == TimeSpan.Zero) if (newValue == TimeSpan.Zero)
{ {
_delayTimer.Tick -= _populateDropDownHandler;
_delayTimer = null; _delayTimer = null;
} }
} }
@ -678,7 +681,7 @@ namespace Avalonia.Controls
if (_delayTimer == null) if (_delayTimer == null)
{ {
_delayTimer = new DispatcherTimer(); _delayTimer = new DispatcherTimer();
_delayTimer.Tick += PopulateDropDown; _delayTimer.Tick += _populateDropDownHandler;
} }
// Set the new tick interval // Set the new tick interval
@ -864,6 +867,7 @@ namespace Avalonia.Controls
/// </summary> /// </summary>
public AutoCompleteBox() public AutoCompleteBox()
{ {
_populateDropDownHandler = PopulateDropDown;
ClearView(); ClearView();
} }
@ -1771,10 +1775,7 @@ namespace Avalonia.Controls
/// <param name="e">The event arguments.</param> /// <param name="e">The event arguments.</param>
private void PopulateDropDown(object? sender, EventArgs e) private void PopulateDropDown(object? sender, EventArgs e)
{ {
if (_delayTimer != null) _delayTimer?.Stop();
{
_delayTimer.Stop();
}
// Update the prefix/search text. // Update the prefix/search text.
SearchText = Text; SearchText = Text;

Loading…
Cancel
Save