Dictionary FilteredView add operation adds last

This commit is contained in:
neuecc 2024-09-10 01:22:38 +09:00
parent b0bc7c2151
commit 9c4f7b2d9e
2 changed files with 21 additions and 29 deletions

View File

@ -7,36 +7,17 @@ using System.Collections;
using System.Collections.Generic;
var dict = new ObservableDictionary<int, string>();
var view = dict.CreateView(x => x).ToNotifyCollectionChanged();
dict.Add(key: 1, value: "foo");
dict.Add(key: 2, value: "bar");
// Queue <-> List Synchronization
var queue = new ObservableQueue<int>();
queue.Enqueue(1);
queue.Enqueue(10);
queue.Enqueue(100);
queue.Enqueue(1000);
queue.Enqueue(10000);
using var view = queue.CreateView(x => x.ToString() + "$");
using var viewList = view.ToViewList();
Console.WriteLine(viewList[2]); // 100$
view.ViewChanged += View_ViewChanged;
void View_ViewChanged(in SynchronizedViewChangedEventArgs<int, string> eventArgs)
foreach (var item in view)
{
if (eventArgs.Action == NotifyCollectionChangedAction.Add)
{
// eventArgs.OldItem.View.
}
throw new NotImplementedException();
Console.WriteLine(item);
}
class ViewModel
{
public int Id { get; set; }

View File

@ -64,9 +64,20 @@ internal class FiltableSynchronizedViewList<T, TView> : ISynchronizedViewList<TV
case NotifyCollectionChangedAction.Add: // Add or Insert
if (e.IsSingleItem)
{
var index = listView.Insert(e.NewStartingIndex, e.NewItem.View);
OnCollectionChanged(e.WithNewStartingIndex(index));
return;
if (e.OldStartingIndex == -1)
{
// add operation
var index = listView.Count;
listView.Insert(index, e.NewItem.View);
OnCollectionChanged(e.WithNewStartingIndex(index));
return;
}
else
{
var index = listView.Insert(e.NewStartingIndex, e.NewItem.View);
OnCollectionChanged(e.WithNewStartingIndex(index));
return;
}
}
else
{