diff --git a/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml b/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml index b406c69..6801ee4 100644 --- a/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml +++ b/src/Ursa.Themes.Semi/Controls/MultiAutoCompleteBox.axaml @@ -37,7 +37,7 @@ - + diff --git a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs index 829ccd0..f033d72 100644 --- a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs +++ b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteBox.cs @@ -637,6 +637,11 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr if (e.Key == Key.Down && !this.IsAllowedXYNavigationMode(e.KeyDeviceType)) { + if (string.IsNullOrEmpty(TextBox?.Text)) + { + UpdateTextValue(string.Empty, true); + } + RefreshView(); SetCurrentValue(IsDropDownOpenProperty, true); e.Handled = true; } @@ -1101,7 +1106,7 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr { if (_popupHasOpened) { - if (SelectionAdapter != null) SelectionAdapter.SelectedItem = null; + // if (SelectionAdapter != null) SelectionAdapter.SelectedItem = null; if (DropDownPopup != null) DropDownPopup.IsOpen = false; OnDropDownClosed(System.EventArgs.Empty); } @@ -1564,7 +1569,10 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr /// The selection changed event data. private void OnAdapterSelectionChanged(object? sender, SelectionChangedEventArgs e) { - SelectedItems?.Add(_adapter?.SelectedItem); + if (_valueBindingEvaluator is null) return; + UpdateTextValue(_valueBindingEvaluator?.GetDynamicValue(_adapter?.SelectedItem), false); + // SelectedItems?.Add(_adapter?.SelectedItem); + } //TODO Check UpdateTextCompletion @@ -1579,6 +1587,7 @@ public partial class MultiAutoCompleteBox : TemplatedControl, IInnerContentContr // Completion will update the selected value //UpdateTextCompletion(false); + SelectedItems?.Add(_adapter?.SelectedItem); UpdateTextValue(string.Empty, false); // Text should not be selected diff --git a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteSelectionAdapter.cs b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteSelectionAdapter.cs index a8a0116..da72448 100644 --- a/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteSelectionAdapter.cs +++ b/src/Ursa/Controls/AutoCompleteBox/MultiAutoCompleteSelectionAdapter.cs @@ -1,4 +1,5 @@ using System.Collections; +using System.Diagnostics; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; @@ -16,9 +17,6 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter /// private SelectingItemsControl? _selector; - private object? _previewSelectedItem; - private object? _selectedItem; - /// /// Initializes a new instance of the /// @@ -110,14 +108,13 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter /// The selected item of the underlying selection adapter. public object? SelectedItem { - get => _selectedItem; + get => SelectorControl?.SelectedItem; set { IgnoringSelectionChanged = true; if (SelectorControl != null) { - _selectedItem = value; SelectorControl.SelectedItem = value; } // Attempt to reset the scroll viewer's position @@ -215,7 +212,9 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter private void OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { if (IgnoringSelectionChanged) return; - _previewSelectedItem = SelectorControl?.SelectedItem; + // SelectedItem = SelectorControl?.SelectedItem; + SelectionChanged?.Invoke(this, e); + // _previewSelectedItem = SelectorControl?.SelectedItem; } /// @@ -258,6 +257,7 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter /// internal void OnCommit() { + /* if (_previewSelectedItem is null) return; SelectedItem = _previewSelectedItem; SelectionChanged?.Invoke(this, @@ -267,6 +267,7 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter new List { SelectedItem } ) ); + */ Commit?.Invoke(this, new RoutedEventArgs()); AfterAdapterAction(); } @@ -292,7 +293,6 @@ public class MultiAutoCompleteSelectionAdapter : ISelectionAdapter { SelectorControl.SelectedItem = null; SelectorControl.SelectedIndex = -1; - _previewSelectedItem = null; } IgnoringSelectionChanged = false; }