From d549b4702b513ff41b4f2622e982c7da116bf2f3 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 31 Jan 2024 11:15:20 +0800 Subject: [PATCH] feat: handle remove in taginput. --- .../ControlClassesInput.cs | 21 ++++++++++++++++--- src/Ursa/Controls/TagInput/TagInput.cs | 6 ++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Ursa/Controls/ControlClassesInput/ControlClassesInput.cs b/src/Ursa/Controls/ControlClassesInput/ControlClassesInput.cs index 2681256..9966c06 100644 --- a/src/Ursa/Controls/ControlClassesInput/ControlClassesInput.cs +++ b/src/Ursa/Controls/ControlClassesInput/ControlClassesInput.cs @@ -11,6 +11,7 @@ public class ControlClassesInput: TemplatedControl { LinkedList> _history = new(); LinkedList> _undoHistory = new(); + private bool _disableHistory = false; public int CountOfHistoricalRecord { get; set; } = 10; @@ -50,7 +51,7 @@ public class ControlClassesInput: TemplatedControl public ControlClassesInput() { TargetClasses = new ObservableCollection(); - TargetClasses.CollectionChanged += InccOnCollectionChanged; + //TargetClasses.CollectionChanged += InccOnCollectionChanged; } private List _targets = new(); @@ -91,12 +92,14 @@ public class ControlClassesInput: TemplatedControl private void InccOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { + if(_disableHistory) return; SaveHistory(TargetClasses?.ToList() ?? new List(), true); } private void SaveHistory(List strings, bool fromInput) { _history.AddLast(strings); + _undoHistory.Clear(); if (_history.Count > CountOfHistoricalRecord) { _history.RemoveFirst(); @@ -135,7 +138,13 @@ public class ControlClassesInput: TemplatedControl var node = _history.Last; _history.RemoveLast(); _undoHistory.AddFirst(node); - SetCurrentValue(TargetClassesProperty, new ObservableCollection(node.Value)); + _disableHistory = true; + TargetClasses.Clear(); + foreach (var value in _history.Last.Value) + { + TargetClasses.Add(value); + } + _disableHistory = false; SetClassesToTarget(false); } @@ -144,7 +153,13 @@ public class ControlClassesInput: TemplatedControl var node = _undoHistory.First; _undoHistory.RemoveFirst(); _history.AddLast(node); - SetCurrentValue(TargetClassesProperty, new ObservableCollection(node.Value)); + _disableHistory = true; + TargetClasses.Clear(); + foreach (var value in _history.Last.Value) + { + TargetClasses.Add(value); + } + _disableHistory = false; SetClassesToTarget(false); } diff --git a/src/Ursa/Controls/TagInput/TagInput.cs b/src/Ursa/Controls/TagInput/TagInput.cs index f57e7eb..920d9ac 100644 --- a/src/Ursa/Controls/TagInput/TagInput.cs +++ b/src/Ursa/Controls/TagInput/TagInput.cs @@ -190,6 +190,12 @@ public class TagInput : TemplatedControl } } } + else if (e.Action == NotifyCollectionChangedAction.Reset) + { + Items.Clear(); + Items.Add(_textBox); + InvalidateVisual(); + } }