Conversation List Reorder

This commit is contained in:
2026-06-23 11:32:47 +02:00
parent afac63be1a
commit 668449fd16
6 changed files with 59 additions and 10 deletions

View File

@@ -66,7 +66,40 @@ namespace BS.Shared.Extensions
}
}
public static void RemoveRange<T>(this IList<T> pList, IEnumerable<T> pToRemove)
public static void UpdateBy<T>(this IList<T> a_list, IList<T> b_list)
{
// Elemente entfernen, die in der Zielliste nicht mehr vorkommen.
// Rückwärts iterieren, damit RemoveAt die noch zu prüfenden Indizes nicht verschiebt.
for (int i = a_list.Count - 1; i >= 0; i--)
{
if (!b_list.Contains(a_list[i]))
a_list.RemoveAt(i);
}
// Reihenfolge angleichen und fehlende Elemente einfügen.
// Bewusst über Insert/RemoveAt statt über den Indexer (a_list[i] = ...),
// da BindingList<T> beim Indexer nur ItemChanged meldet und WPF die
// ListView dann nicht neu anordnet. Insert/RemoveAt melden ItemAdded/ItemDeleted.
for (int i = 0; i < b_list.Count; i++)
{
var item = b_list[i];
if (i < a_list.Count && a_list[i].Equals(item))
continue;
var currentIndex = a_list.IndexOf(item);
if (currentIndex >= 0)
a_list.RemoveAt(currentIndex);
a_list.Insert(i, item);
}
// Eventuelle überzählige Elemente am Ende entfernen.
while (a_list.Count > b_list.Count)
a_list.RemoveAt(a_list.Count - 1);
}
public static void RemoveRange<T>(this IList<T> pList, IEnumerable<T> pToRemove)
{
foreach (T iItem in pToRemove.ToList())
{