2024-02-01 19:06:45 +09:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using ObservableCollections;
|
|
|
|
|
|
|
|
|
|
var models = new ObservableList<int>(Enumerable.Range(0, 10));
|
2021-08-04 09:30:34 +09:00
|
|
|
|
|
2024-02-01 19:06:45 +09:00
|
|
|
|
var viewModels = models.CreateView(x => new ViewModel
|
|
|
|
|
{
|
|
|
|
|
Id = x,
|
|
|
|
|
Value = "@" + x
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
viewModels.AttachFilter(new HogeFilter(), true);
|
2021-09-07 19:09:57 +09:00
|
|
|
|
|
2024-02-01 19:06:45 +09:00
|
|
|
|
models.Add(100);
|
2021-09-22 20:19:11 +09:00
|
|
|
|
|
2024-02-01 19:06:45 +09:00
|
|
|
|
foreach (var (x, xs) in viewModels)
|
|
|
|
|
{
|
|
|
|
|
System.Console.WriteLine(xs.Value);
|
|
|
|
|
}
|
2021-09-07 19:09:57 +09:00
|
|
|
|
|
2024-02-01 19:06:45 +09:00
|
|
|
|
class ViewModel
|
2021-09-22 20:19:11 +09:00
|
|
|
|
{
|
2024-02-01 19:06:45 +09:00
|
|
|
|
public int Id { get; set; }
|
|
|
|
|
public string Value { get; set; }
|
2021-08-04 09:30:34 +09:00
|
|
|
|
}
|
2021-09-22 20:19:11 +09:00
|
|
|
|
|
2024-02-01 19:06:45 +09:00
|
|
|
|
class HogeFilter : ISynchronizedViewFilter<int, ViewModel>
|
|
|
|
|
{
|
|
|
|
|
public bool IsMatch(int value, ViewModel view)
|
|
|
|
|
{
|
|
|
|
|
return value % 2 == 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void WhenTrue(int value, ViewModel view)
|
|
|
|
|
{
|
|
|
|
|
view.Value = $"@{value} (even)";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void WhenFalse(int value, ViewModel view)
|
|
|
|
|
{
|
|
|
|
|
view.Value = $"@{value} (odd)";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnCollectionChanged(
|
|
|
|
|
ChangedKind changedKind,
|
|
|
|
|
int value,
|
|
|
|
|
ViewModel view,
|
|
|
|
|
in NotifyCollectionChangedEventArgs<int> eventArgs)
|
|
|
|
|
{
|
|
|
|
|
switch (changedKind)
|
|
|
|
|
{
|
|
|
|
|
case ChangedKind.Add:
|
|
|
|
|
view.Value += " Add";
|
|
|
|
|
break;
|
|
|
|
|
case ChangedKind.Remove:
|
|
|
|
|
view.Value += " Remove";
|
|
|
|
|
break;
|
|
|
|
|
case ChangedKind.Move:
|
|
|
|
|
view.Value += $" Move {eventArgs.OldStartingIndex} {eventArgs.NewStartingIndex}";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new ArgumentOutOfRangeException(nameof(changedKind), changedKind, null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|