75 lines
2.0 KiB
C#
Raw Normal View History

using System;
using System.Collections.Specialized;
2024-02-15 17:13:16 +09:00
using R3;
using System.Linq;
using ObservableCollections;
2024-09-03 18:54:59 +09:00
using System.Collections;
using System.Collections.Generic;
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
// Queue <-> List Synchronization
var queue = new ObservableQueue<int>();
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
queue.Enqueue(1);
queue.Enqueue(10);
queue.Enqueue(100);
queue.Enqueue(1000);
queue.Enqueue(10000);
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
using var view = queue.CreateView(x => x.ToString() + "$");
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
using var viewList = view.ToViewList();
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
Console.WriteLine(viewList[2]); // 100$
2024-02-15 17:13:16 +09:00
2024-09-03 18:54:59 +09:00
view.ViewChanged += View_ViewChanged;
2021-08-04 09:30:34 +09:00
2024-09-03 18:54:59 +09:00
void View_ViewChanged(in SynchronizedViewChangedEventArgs<int, string> eventArgs)
{
2024-09-03 18:54:59 +09:00
if (eventArgs.Action == NotifyCollectionChangedAction.Add)
{
// eventArgs.OldItem.View.
}
2021-09-22 20:19:11 +09:00
2024-09-03 18:54:59 +09:00
throw new NotImplementedException();
}
class ViewModel
2021-09-22 20:19:11 +09:00
{
public int Id { get; set; }
public string Value { get; set; } = default!;
2021-08-04 09:30:34 +09:00
}
2021-09-22 20:19:11 +09:00
2024-08-27 23:28:30 +09:00
class HogeFilter : ISynchronizedViewFilter<int>
{
2024-08-27 23:28:30 +09:00
public bool IsMatch(int value)
{
return value % 2 == 0;
}
public void OnCollectionChanged(in SynchronizedViewChangedEventArgs<int, ViewModel> eventArgs)
{
switch (eventArgs.Action)
{
case NotifyCollectionChangedAction.Add:
2024-08-28 17:53:17 +09:00
eventArgs.NewItem.View.Value += " Add";
break;
case NotifyCollectionChangedAction.Remove:
2024-08-28 17:53:17 +09:00
eventArgs.OldItem.View.Value += " Remove";
break;
case NotifyCollectionChangedAction.Move:
2024-08-28 17:53:17 +09:00
eventArgs.NewItem.View.Value += $" Move {eventArgs.OldStartingIndex} {eventArgs.NewStartingIndex}";
break;
case NotifyCollectionChangedAction.Replace:
2024-08-28 17:53:17 +09:00
eventArgs.NewItem.View.Value += $" Replace {eventArgs.NewStartingIndex}";
break;
case NotifyCollectionChangedAction.Reset:
break;
default:
throw new ArgumentOutOfRangeException(nameof(eventArgs.Action), eventArgs.Action, null);
}
}
}