1using System.Collections.ObjectModel;
27 public class ObservableItemGroup<T>(string Name, IEnumerable<T> Items) : ObservableCollection<T>(Items),
IUniqueItem
31 public string UniqueName {
get; } = Name;
39 public override string ToString()
41 return this.UniqueName;
47 public static void UpdateGroupsItems(ObservableItemGroup<IUniqueItem> OldCollection, ObservableItemGroup<IUniqueItem> NewCollection)
51 Dictionary<string, IUniqueItem> ToRemove = [];
53 foreach (IUniqueItem Item
in OldCollection)
54 ToRemove[Item.UniqueName] = Item;
56 foreach (IUniqueItem Item
in NewCollection)
57 ToRemove.Remove(Item.UniqueName);
59 foreach (IUniqueItem Item
in ToRemove.Values)
60 OldCollection.Remove(Item);
64 for (
int i = 0; i < NewCollection.Count; i++)
66 IUniqueItem NewItem = NewCollection[i];
68 if (i >= OldCollection.Count)
71 OldCollection.Add(NewItem);
75 IUniqueItem OldItem = OldCollection[i];
77 if (OldItem.UniqueName.Equals(NewItem.UniqueName, StringComparison.Ordinal))
82 if (OldItem is ObservableItemGroup<IUniqueItem> OldItems && NewItem is ObservableItemGroup<IUniqueItem> NewItems)
83 UpdateGroupsItems(OldItems, NewItems);
90 for (
int j = i + 1; j < OldCollection.Count; j++)
92 if (OldCollection[j].UniqueName.Equals(NewItem.UniqueName, StringComparison.Ordinal))
102 OldCollection.Insert(i, NewItem);
107 OldCollection.Move(OldIndex, i);
110 if (OldItem is ObservableItemGroup<IUniqueItem> OldItems && NewItem is ObservableItemGroup<IUniqueItem> NewItems)
111 UpdateGroupsItems(OldItems, NewItems);
Base class that references services in the app.
static IStringLocalizer Localizer
Localization service
string UniqueName
Unique name used to compare items.
string LocalisedName
Get the groups's localised name