Conversation List Reorder
This commit is contained in:
@@ -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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user