80 lines
1.8 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-02-15 17:13:16 +09:00
var list = new ObservableList<int>();
list.ObserveAdd()
.Subscribe(x =>
{
Console.WriteLine(x);
});
list.Add(10);
list.Add(20);
list.AddRange(new[] { 10, 20, 30 });
var models = new ObservableList<int>(Enumerable.Range(0, 10));
2021-08-04 09:30:34 +09:00
var viewModels = models.CreateView(x => new ViewModel
{
Id = x,
Value = "@" + x
});
2024-08-27 23:28:30 +09:00
viewModels.AttachFilter(new HogeFilter());
models.Add(100);
2021-09-22 20:19:11 +09:00
2024-08-27 23:28:30 +09:00
foreach (var x in viewModels)
{
2024-08-27 23:28:30 +09:00
System.Console.WriteLine(x);
}
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:
eventArgs.NewView.Value += " Add";
break;
case NotifyCollectionChangedAction.Remove:
eventArgs.OldView.Value += " Remove";
break;
case NotifyCollectionChangedAction.Move:
eventArgs.NewView.Value += $" Move {eventArgs.OldViewIndex} {eventArgs.NewViewIndex}";
break;
case NotifyCollectionChangedAction.Replace:
eventArgs.NewView.Value += $" Replace {eventArgs.NewViewIndex}";
break;
case NotifyCollectionChangedAction.Reset:
break;
default:
throw new ArgumentOutOfRangeException(nameof(eventArgs.Action), eventArgs.Action, null);
}
}
}