fix: fix tag input item update issue.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Collections.Specialized;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
@@ -137,6 +138,7 @@ public class TagInput : TemplatedControl
|
|||||||
private void OnTagsPropertyChanged(AvaloniaPropertyChangedEventArgs args)
|
private void OnTagsPropertyChanged(AvaloniaPropertyChangedEventArgs args)
|
||||||
{
|
{
|
||||||
var newTags = args.GetNewValue<IList<string>>();
|
var newTags = args.GetNewValue<IList<string>>();
|
||||||
|
var oldTags = args.GetOldValue<IList<string>>();
|
||||||
for (int i = 0; i < Items.Count - 1; i++)
|
for (int i = 0; i < Items.Count - 1; i++)
|
||||||
{
|
{
|
||||||
Items.RemoveAt(Items.Count - 1);
|
Items.RemoveAt(Items.Count - 1);
|
||||||
@@ -146,6 +148,46 @@ public class TagInput : TemplatedControl
|
|||||||
{
|
{
|
||||||
Items.Insert(Items.Count - 1, newTags[i]);
|
Items.Insert(Items.Count - 1, newTags[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldTags is INotifyCollectionChanged inccold)
|
||||||
|
{
|
||||||
|
inccold.CollectionChanged-= OnCollectionChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Tags is INotifyCollectionChanged incc)
|
||||||
|
{
|
||||||
|
incc.CollectionChanged += OnCollectionChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Action == NotifyCollectionChangedAction.Add)
|
||||||
|
{
|
||||||
|
var items = e.NewItems;
|
||||||
|
int index = e.NewStartingIndex;
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
if (item is string s)
|
||||||
|
{
|
||||||
|
Items.Insert(index, s);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.Action == NotifyCollectionChangedAction.Remove)
|
||||||
|
{
|
||||||
|
var items = e.OldItems;
|
||||||
|
int index = e.OldStartingIndex;
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
if (item is string s)
|
||||||
|
{
|
||||||
|
Items.RemoveAt(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTextBoxKeyDown(object? sender, KeyEventArgs args)
|
private void OnTextBoxKeyDown(object? sender, KeyEventArgs args)
|
||||||
@@ -173,7 +215,7 @@ public class TagInput : TemplatedControl
|
|||||||
for (int i = 0; i < values.Length; i++)
|
for (int i = 0; i < values.Length; i++)
|
||||||
{
|
{
|
||||||
int index = Items.Count - 1;
|
int index = Items.Count - 1;
|
||||||
Items.Insert(index, values[i]);
|
// Items.Insert(index, values[i]);
|
||||||
Tags.Insert(index, values[i]);
|
Tags.Insert(index, values[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +231,7 @@ public class TagInput : TemplatedControl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int index = Items.Count - 2;
|
int index = Items.Count - 2;
|
||||||
Items.RemoveAt(index);
|
// Items.RemoveAt(index);
|
||||||
Tags.RemoveAt(index);
|
Tags.RemoveAt(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -204,7 +246,7 @@ public class TagInput : TemplatedControl
|
|||||||
int? index = _itemsControl?.IndexFromContainer(presenter);
|
int? index = _itemsControl?.IndexFromContainer(presenter);
|
||||||
if (index is >= 0 && index < Items.Count - 1)
|
if (index is >= 0 && index < Items.Count - 1)
|
||||||
{
|
{
|
||||||
Items.RemoveAt(index.Value);
|
// Items.RemoveAt(index.Value);
|
||||||
Tags.RemoveAt(index.Value);
|
Tags.RemoveAt(index.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user