ISynchronizedViewFilter.OnCollectionChanged receives NCCEARGS
This commit is contained in:
parent
c2d1cf1989
commit
09ebd9aba4
@ -1,11 +1,12 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
</PropertyGroup>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\ObservableCollections\ObservableCollections.csproj" />
|
<ProjectReference Include="..\..\src\ObservableCollections\ObservableCollections.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -7,7 +7,7 @@ namespace ObservableCollections
|
|||||||
bool IsMatch(T value, TView view);
|
bool IsMatch(T value, TView view);
|
||||||
void WhenTrue(T value, TView view);
|
void WhenTrue(T value, TView view);
|
||||||
void WhenFalse(T value, TView view);
|
void WhenFalse(T value, TView view);
|
||||||
void OnCollectionChanged(ChangedKind changedKind, T value, TView view);
|
void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ChangedKind
|
public enum ChangedKind
|
||||||
@ -35,14 +35,14 @@ namespace ObservableCollections
|
|||||||
public bool IsMatch(T value, TView view) => isMatch(value, view);
|
public bool IsMatch(T value, TView view) => isMatch(value, view);
|
||||||
public void WhenFalse(T value, TView view) => whenFalse?.Invoke(value, view);
|
public void WhenFalse(T value, TView view) => whenFalse?.Invoke(value, view);
|
||||||
public void WhenTrue(T value, TView view) => whenTrue?.Invoke(value, view);
|
public void WhenTrue(T value, TView view) => whenTrue?.Invoke(value, view);
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view) => onCollectionChanged?.Invoke(changedKind, value, view);
|
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs) => onCollectionChanged?.Invoke(changedKind, value, view);
|
||||||
|
|
||||||
class NullViewFilter : ISynchronizedViewFilter<T, TView>
|
class NullViewFilter : ISynchronizedViewFilter<T, TView>
|
||||||
{
|
{
|
||||||
public bool IsMatch(T value, TView view) => true;
|
public bool IsMatch(T value, TView view) => true;
|
||||||
public void WhenFalse(T value, TView view) { }
|
public void WhenFalse(T value, TView view) { }
|
||||||
public void WhenTrue(T value, TView view) { }
|
public void WhenTrue(T value, TView view) { }
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view) { }
|
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,12 +68,12 @@ namespace ObservableCollections
|
|||||||
return filter == SynchronizedViewFilter<T, TView>.Null;
|
return filter == SynchronizedViewFilter<T, TView>.Null;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnAdd(filter, value.value, value.view);
|
InvokeOnAdd(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
if (filter.IsMatch(value, view))
|
if (filter.IsMatch(value, view))
|
||||||
{
|
{
|
||||||
@ -83,27 +83,27 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
filter.WhenFalse(value, view);
|
filter.WhenFalse(value, view);
|
||||||
}
|
}
|
||||||
filter.OnCollectionChanged(ChangedKind.Add, value, view);
|
filter.OnCollectionChanged(ChangedKind.Add, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnRemove(filter, value.value, value.view);
|
InvokeOnRemove(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
filter.OnCollectionChanged(ChangedKind.Remove, value, view);
|
filter.OnCollectionChanged(ChangedKind.Remove, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnMove(filter, value.value, value.view);
|
InvokeOnMove(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
filter.OnCollectionChanged(ChangedKind.Move, value, view);
|
filter.OnCollectionChanged(ChangedKind.Move, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAttach<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnAttach<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
||||||
|
@ -3,6 +3,7 @@ using System.Buffers;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections.Internal
|
namespace ObservableCollections.Internal
|
||||||
{
|
{
|
||||||
|
@ -122,7 +122,7 @@ namespace ObservableCollections.Internal
|
|||||||
var view = transform(value);
|
var view = transform(value);
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -131,7 +131,7 @@ namespace ObservableCollections.Internal
|
|||||||
var view = transform(value);
|
var view = transform(value);
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ namespace ObservableCollections.Internal
|
|||||||
var value = e.OldItem;
|
var value = e.OldItem;
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Remove((value, id), out var v);
|
dict.Remove((value, id), out var v);
|
||||||
filter.InvokeOnRemove(v.Value, v.View);
|
filter.InvokeOnRemove(v.Value, v.View, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Remove((value, id), out var v);
|
dict.Remove((value, id), out var v);
|
||||||
filter.InvokeOnRemove(v.Value, v.View);
|
filter.InvokeOnRemove(v.Value, v.View, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,8 +168,8 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldView);
|
filter.InvokeOnRemove(oldView, e);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -178,7 +178,7 @@ namespace ObservableCollections.Internal
|
|||||||
var oldValue = e.OldItem;
|
var oldValue = e.OldItem;
|
||||||
if (dict.TryGetValue((oldValue, identitySelector(oldValue)), out var view))
|
if (dict.TryGetValue((oldValue, identitySelector(oldValue)), out var view))
|
||||||
{
|
{
|
||||||
filter.InvokeOnMove(view);
|
filter.InvokeOnMove(view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -187,7 +187,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -128,7 +128,7 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -138,7 +138,7 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(id, out var view))
|
if (viewMap.Remove(id, out var view))
|
||||||
{
|
{
|
||||||
dict.Remove((view, id), out var v);
|
dict.Remove((view, id), out var v);
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -163,7 +163,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(id, out var view))
|
if (viewMap.Remove(id, out var view))
|
||||||
{
|
{
|
||||||
dict.Remove((view, id), out var v);
|
dict.Remove((view, id), out var v);
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(oldKey, out var oldView))
|
if (viewMap.Remove(oldKey, out var oldView))
|
||||||
{
|
{
|
||||||
dict.Remove((oldView, oldKey));
|
dict.Remove((oldView, oldKey));
|
||||||
filter.InvokeOnRemove(oldValue, oldView);
|
filter.InvokeOnRemove(oldValue, oldView, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
var value = e.NewItem;
|
var value = e.NewItem;
|
||||||
@ -186,7 +186,7 @@ namespace ObservableCollections.Internal
|
|||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
|
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -196,7 +196,7 @@ namespace ObservableCollections.Internal
|
|||||||
var key = identitySelector(value);
|
var key = identitySelector(value);
|
||||||
if (viewMap.TryGetValue(key, out var view))
|
if (viewMap.TryGetValue(key, out var view))
|
||||||
{
|
{
|
||||||
filter.InvokeOnMove(value, view);
|
filter.InvokeOnMove(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -205,7 +205,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -121,14 +121,14 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = selector(e.NewItem);
|
var v = selector(e.NewItem);
|
||||||
dict.Add(e.NewItem.Key, (e.NewItem.Value, v));
|
dict.Add(e.NewItem.Key, (e.NewItem.Value, v));
|
||||||
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v);
|
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Remove:
|
case NotifyCollectionChangedAction.Remove:
|
||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem.Key, out var v))
|
if (dict.Remove(e.OldItem.Key, out var v))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, v.Item1), v.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, v.Item1), v.Item2), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -136,12 +136,12 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem.Key, out var oldView))
|
if (dict.Remove(e.OldItem.Key, out var oldView))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, oldView.Item1), oldView.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, oldView.Item1), oldView.Item2), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
var v = selector(e.NewItem);
|
var v = selector(e.NewItem);
|
||||||
dict[e.NewItem.Key] = (e.NewItem.Value, v);
|
dict[e.NewItem.Key] = (e.NewItem.Value, v);
|
||||||
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v);
|
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -150,7 +150,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(item.Key, item.Value.Item1), item.Value.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(item.Key, item.Value.Item1), item.Value.Item2), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
dict.Add(e.NewItem, v);
|
dict.Add(e.NewItem, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -126,7 +126,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
dict.Add(item, v);
|
dict.Add(item, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -135,7 +135,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem, out var value))
|
if (dict.Remove(e.OldItem, out var value))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(value.Item1, value.Item2);
|
filter.InvokeOnRemove(value.Item1, value.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -144,7 +144,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(item, out var value))
|
if (dict.Remove(item, out var value))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(value.Item1, value.Item2);
|
filter.InvokeOnRemove(value.Item1, value.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +154,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -3,6 +3,7 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections
|
namespace ObservableCollections
|
||||||
{
|
{
|
||||||
|
@ -136,7 +136,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
list.Add(v);
|
list.Add(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -144,7 +144,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
list.Add(v);
|
list.Add(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
list.Insert(e.NewStartingIndex, v);
|
list.Insert(e.NewStartingIndex, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -166,7 +166,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (span[i], selector(span[i]));
|
var v = (span[i], selector(span[i]));
|
||||||
newArray[i] = v;
|
newArray[i] = v;
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
list.InsertRange(e.NewStartingIndex, newArray);
|
list.InsertRange(e.NewStartingIndex, newArray);
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = list[e.OldStartingIndex];
|
var v = list[e.OldStartingIndex];
|
||||||
list.RemoveAt(e.OldStartingIndex);
|
list.RemoveAt(e.OldStartingIndex);
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -185,7 +185,7 @@ namespace ObservableCollections
|
|||||||
for (int i = e.OldStartingIndex; i < len; i++)
|
for (int i = e.OldStartingIndex; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = list[i];
|
var v = list[i];
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
list.RemoveRange(e.OldStartingIndex, e.OldItems.Length);
|
list.RemoveRange(e.OldStartingIndex, e.OldItems.Length);
|
||||||
@ -199,8 +199,8 @@ namespace ObservableCollections
|
|||||||
var oldItem = list[e.NewStartingIndex];
|
var oldItem = list[e.NewStartingIndex];
|
||||||
list[e.NewStartingIndex] = v;
|
list[e.NewStartingIndex] = v;
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldItem);
|
filter.InvokeOnRemove(oldItem, e);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -209,7 +209,7 @@ namespace ObservableCollections
|
|||||||
list.RemoveAt(e.OldStartingIndex);
|
list.RemoveAt(e.OldStartingIndex);
|
||||||
list.Insert(e.NewStartingIndex, removeItem);
|
list.Insert(e.NewStartingIndex, removeItem);
|
||||||
|
|
||||||
filter.InvokeOnMove(removeItem);
|
filter.InvokeOnMove(removeItem, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -217,7 +217,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list.Clear();
|
list.Clear();
|
||||||
|
@ -134,7 +134,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
queue.Enqueue(v);
|
queue.Enqueue(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
queue.Enqueue(v);
|
queue.Enqueue(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = queue.Dequeue();
|
var v = queue.Dequeue();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -159,7 +159,7 @@ namespace ObservableCollections
|
|||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = queue.Dequeue();
|
var v = queue.Dequeue();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in queue)
|
foreach (var item in queue)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
queue.Clear();
|
queue.Clear();
|
||||||
|
@ -141,7 +141,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
ringBuffer.AddFirst(v);
|
ringBuffer.AddFirst(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -149,7 +149,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
ringBuffer.AddFirst(v);
|
ringBuffer.AddFirst(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,7 +160,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
ringBuffer.AddLast(v);
|
ringBuffer.AddLast(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
ringBuffer.AddLast(v);
|
ringBuffer.AddLast(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -181,14 +181,14 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveFirst();
|
var v = ringBuffer.RemoveFirst();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < e.OldItems.Length; i++)
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveFirst();
|
var v = ringBuffer.RemoveFirst();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,14 +198,14 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveLast();
|
var v = ringBuffer.RemoveLast();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < e.OldItems.Length; i++)
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveLast();
|
var v = ringBuffer.RemoveLast();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,7 +215,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in ringBuffer)
|
foreach (var item in ringBuffer)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ringBuffer.Clear();
|
ringBuffer.Clear();
|
||||||
@ -228,8 +228,8 @@ namespace ObservableCollections
|
|||||||
var oldItem = ringBuffer[e.NewStartingIndex];
|
var oldItem = ringBuffer[e.NewStartingIndex];
|
||||||
ringBuffer[e.NewStartingIndex] = v;
|
ringBuffer[e.NewStartingIndex] = v;
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldItem);
|
filter.InvokeOnRemove(oldItem, e);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
|
@ -134,7 +134,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
stack.Push(v);
|
stack.Push(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
stack.Push(v);
|
stack.Push(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = stack.Pop();
|
var v = stack.Pop();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -159,7 +159,7 @@ namespace ObservableCollections
|
|||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = stack.Pop();
|
var v = stack.Pop();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in stack)
|
foreach (var item in stack)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stack.Clear();
|
stack.Clear();
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections
|
namespace ObservableCollections
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,7 @@ namespace ObservableCollections
|
|||||||
bool IsMatch(T value, TView view);
|
bool IsMatch(T value, TView view);
|
||||||
void WhenTrue(T value, TView view);
|
void WhenTrue(T value, TView view);
|
||||||
void WhenFalse(T value, TView view);
|
void WhenFalse(T value, TView view);
|
||||||
void OnCollectionChanged(ChangedKind changedKind, T value, TView view);
|
void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ChangedKind
|
public enum ChangedKind
|
||||||
@ -35,14 +35,14 @@ namespace ObservableCollections
|
|||||||
public bool IsMatch(T value, TView view) => isMatch(value, view);
|
public bool IsMatch(T value, TView view) => isMatch(value, view);
|
||||||
public void WhenFalse(T value, TView view) => whenFalse?.Invoke(value, view);
|
public void WhenFalse(T value, TView view) => whenFalse?.Invoke(value, view);
|
||||||
public void WhenTrue(T value, TView view) => whenTrue?.Invoke(value, view);
|
public void WhenTrue(T value, TView view) => whenTrue?.Invoke(value, view);
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view) => onCollectionChanged?.Invoke(changedKind, value, view);
|
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs) => onCollectionChanged?.Invoke(changedKind, value, view);
|
||||||
|
|
||||||
class NullViewFilter : ISynchronizedViewFilter<T, TView>
|
class NullViewFilter : ISynchronizedViewFilter<T, TView>
|
||||||
{
|
{
|
||||||
public bool IsMatch(T value, TView view) => true;
|
public bool IsMatch(T value, TView view) => true;
|
||||||
public void WhenFalse(T value, TView view) { }
|
public void WhenFalse(T value, TView view) { }
|
||||||
public void WhenTrue(T value, TView view) { }
|
public void WhenTrue(T value, TView view) { }
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view) { }
|
public void OnCollectionChanged(ChangedKind changedKind, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,12 +68,12 @@ namespace ObservableCollections
|
|||||||
return filter == SynchronizedViewFilter<T, TView>.Null;
|
return filter == SynchronizedViewFilter<T, TView>.Null;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnAdd(filter, value.value, value.view);
|
InvokeOnAdd(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnAdd<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
if (filter.IsMatch(value, view))
|
if (filter.IsMatch(value, view))
|
||||||
{
|
{
|
||||||
@ -83,27 +83,27 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
filter.WhenFalse(value, view);
|
filter.WhenFalse(value, view);
|
||||||
}
|
}
|
||||||
filter.OnCollectionChanged(ChangedKind.Add, value, view);
|
filter.OnCollectionChanged(ChangedKind.Add, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnRemove(filter, value.value, value.view);
|
InvokeOnRemove(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnRemove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
filter.OnCollectionChanged(ChangedKind.Remove, value, view);
|
filter.OnCollectionChanged(ChangedKind.Remove, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
InvokeOnMove(filter, value.value, value.view);
|
InvokeOnMove(filter, value.value, value.view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
filter.OnCollectionChanged(ChangedKind.Move, value, view);
|
filter.OnCollectionChanged(ChangedKind.Move, value, view, eventArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InvokeOnAttach<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
internal static void InvokeOnAttach<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
||||||
|
@ -3,6 +3,7 @@ using System.Buffers;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections.Internal
|
namespace ObservableCollections.Internal
|
||||||
{
|
{
|
||||||
|
@ -122,7 +122,7 @@ namespace ObservableCollections.Internal
|
|||||||
var view = transform(value);
|
var view = transform(value);
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -131,7 +131,7 @@ namespace ObservableCollections.Internal
|
|||||||
var view = transform(value);
|
var view = transform(value);
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ namespace ObservableCollections.Internal
|
|||||||
var value = e.OldItem;
|
var value = e.OldItem;
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Remove((value, id), out var v);
|
dict.Remove((value, id), out var v);
|
||||||
filter.InvokeOnRemove(v.Value, v.View);
|
filter.InvokeOnRemove(v.Value, v.View, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Remove((value, id), out var v);
|
dict.Remove((value, id), out var v);
|
||||||
filter.InvokeOnRemove(v.Value, v.View);
|
filter.InvokeOnRemove(v.Value, v.View, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,8 +168,8 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((value, id), (value, view));
|
dict.Add((value, id), (value, view));
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldView);
|
filter.InvokeOnRemove(oldView, e);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -178,7 +178,7 @@ namespace ObservableCollections.Internal
|
|||||||
var oldValue = e.OldItem;
|
var oldValue = e.OldItem;
|
||||||
if (dict.TryGetValue((oldValue, identitySelector(oldValue)), out var view))
|
if (dict.TryGetValue((oldValue, identitySelector(oldValue)), out var view))
|
||||||
{
|
{
|
||||||
filter.InvokeOnMove(view);
|
filter.InvokeOnMove(view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -187,7 +187,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -128,7 +128,7 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -138,7 +138,7 @@ namespace ObservableCollections.Internal
|
|||||||
var id = identitySelector(value);
|
var id = identitySelector(value);
|
||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(id, out var view))
|
if (viewMap.Remove(id, out var view))
|
||||||
{
|
{
|
||||||
dict.Remove((view, id), out var v);
|
dict.Remove((view, id), out var v);
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -163,7 +163,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(id, out var view))
|
if (viewMap.Remove(id, out var view))
|
||||||
{
|
{
|
||||||
dict.Remove((view, id), out var v);
|
dict.Remove((view, id), out var v);
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ namespace ObservableCollections.Internal
|
|||||||
if (viewMap.Remove(oldKey, out var oldView))
|
if (viewMap.Remove(oldKey, out var oldView))
|
||||||
{
|
{
|
||||||
dict.Remove((oldView, oldKey));
|
dict.Remove((oldView, oldKey));
|
||||||
filter.InvokeOnRemove(oldValue, oldView);
|
filter.InvokeOnRemove(oldValue, oldView, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
var value = e.NewItem;
|
var value = e.NewItem;
|
||||||
@ -186,7 +186,7 @@ namespace ObservableCollections.Internal
|
|||||||
dict.Add((view, id), (value, view));
|
dict.Add((view, id), (value, view));
|
||||||
viewMap.Add(id, view);
|
viewMap.Add(id, view);
|
||||||
|
|
||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -196,7 +196,7 @@ namespace ObservableCollections.Internal
|
|||||||
var key = identitySelector(value);
|
var key = identitySelector(value);
|
||||||
if (viewMap.TryGetValue(key, out var view))
|
if (viewMap.TryGetValue(key, out var view))
|
||||||
{
|
{
|
||||||
filter.InvokeOnMove(value, view);
|
filter.InvokeOnMove(value, view, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -205,7 +205,7 @@ namespace ObservableCollections.Internal
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -121,14 +121,14 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = selector(e.NewItem);
|
var v = selector(e.NewItem);
|
||||||
dict.Add(e.NewItem.Key, (e.NewItem.Value, v));
|
dict.Add(e.NewItem.Key, (e.NewItem.Value, v));
|
||||||
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v);
|
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Remove:
|
case NotifyCollectionChangedAction.Remove:
|
||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem.Key, out var v))
|
if (dict.Remove(e.OldItem.Key, out var v))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, v.Item1), v.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, v.Item1), v.Item2), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -136,12 +136,12 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem.Key, out var oldView))
|
if (dict.Remove(e.OldItem.Key, out var oldView))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, oldView.Item1), oldView.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(e.OldItem.Key, oldView.Item1), oldView.Item2), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
var v = selector(e.NewItem);
|
var v = selector(e.NewItem);
|
||||||
dict[e.NewItem.Key] = (e.NewItem.Value, v);
|
dict[e.NewItem.Key] = (e.NewItem.Value, v);
|
||||||
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v);
|
filter.InvokeOnAdd(new KeyValuePair<TKey, TValue>(e.NewItem.Key, e.NewItem.Value), v, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -150,7 +150,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(item.Key, item.Value.Item1), item.Value.Item2));
|
filter.InvokeOnRemove((new KeyValuePair<TKey, TValue>(item.Key, item.Value.Item1), item.Value.Item2), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
dict.Add(e.NewItem, v);
|
dict.Add(e.NewItem, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -126,7 +126,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
dict.Add(item, v);
|
dict.Add(item, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -135,7 +135,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem, out var value))
|
if (dict.Remove(e.OldItem, out var value))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(value.Item1, value.Item2);
|
filter.InvokeOnRemove(value.Item1, value.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -144,7 +144,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
if (dict.Remove(item, out var value))
|
if (dict.Remove(item, out var value))
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(value.Item1, value.Item2);
|
filter.InvokeOnRemove(value.Item1, value.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +154,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in dict)
|
foreach (var item in dict)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item.Value);
|
filter.InvokeOnRemove(item.Value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dict.Clear();
|
dict.Clear();
|
||||||
|
@ -3,6 +3,7 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections
|
namespace ObservableCollections
|
||||||
{
|
{
|
||||||
|
@ -136,7 +136,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
list.Add(v);
|
list.Add(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -144,7 +144,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
list.Add(v);
|
list.Add(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
list.Insert(e.NewStartingIndex, v);
|
list.Insert(e.NewStartingIndex, v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -166,7 +166,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (span[i], selector(span[i]));
|
var v = (span[i], selector(span[i]));
|
||||||
newArray[i] = v;
|
newArray[i] = v;
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
list.InsertRange(e.NewStartingIndex, newArray);
|
list.InsertRange(e.NewStartingIndex, newArray);
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = list[e.OldStartingIndex];
|
var v = list[e.OldStartingIndex];
|
||||||
list.RemoveAt(e.OldStartingIndex);
|
list.RemoveAt(e.OldStartingIndex);
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -185,7 +185,7 @@ namespace ObservableCollections
|
|||||||
for (int i = e.OldStartingIndex; i < len; i++)
|
for (int i = e.OldStartingIndex; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = list[i];
|
var v = list[i];
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
list.RemoveRange(e.OldStartingIndex, e.OldItems.Length);
|
list.RemoveRange(e.OldStartingIndex, e.OldItems.Length);
|
||||||
@ -199,8 +199,8 @@ namespace ObservableCollections
|
|||||||
var oldItem = list[e.NewStartingIndex];
|
var oldItem = list[e.NewStartingIndex];
|
||||||
list[e.NewStartingIndex] = v;
|
list[e.NewStartingIndex] = v;
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldItem);
|
filter.InvokeOnRemove(oldItem, e);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
@ -209,7 +209,7 @@ namespace ObservableCollections
|
|||||||
list.RemoveAt(e.OldStartingIndex);
|
list.RemoveAt(e.OldStartingIndex);
|
||||||
list.Insert(e.NewStartingIndex, removeItem);
|
list.Insert(e.NewStartingIndex, removeItem);
|
||||||
|
|
||||||
filter.InvokeOnMove(removeItem);
|
filter.InvokeOnMove(removeItem, e);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -217,7 +217,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list.Clear();
|
list.Clear();
|
||||||
|
@ -134,7 +134,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
queue.Enqueue(v);
|
queue.Enqueue(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
queue.Enqueue(v);
|
queue.Enqueue(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = queue.Dequeue();
|
var v = queue.Dequeue();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -159,7 +159,7 @@ namespace ObservableCollections
|
|||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = queue.Dequeue();
|
var v = queue.Dequeue();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in queue)
|
foreach (var item in queue)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
queue.Clear();
|
queue.Clear();
|
||||||
|
@ -141,7 +141,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
ringBuffer.AddFirst(v);
|
ringBuffer.AddFirst(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -149,7 +149,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
ringBuffer.AddFirst(v);
|
ringBuffer.AddFirst(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,7 +160,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
ringBuffer.AddLast(v);
|
ringBuffer.AddLast(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
ringBuffer.AddLast(v);
|
ringBuffer.AddLast(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -181,14 +181,14 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveFirst();
|
var v = ringBuffer.RemoveFirst();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < e.OldItems.Length; i++)
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveFirst();
|
var v = ringBuffer.RemoveFirst();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,14 +198,14 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveLast();
|
var v = ringBuffer.RemoveLast();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < e.OldItems.Length; i++)
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
{
|
{
|
||||||
var v = ringBuffer.RemoveLast();
|
var v = ringBuffer.RemoveLast();
|
||||||
filter.InvokeOnRemove(v);
|
filter.InvokeOnRemove(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,7 +215,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in ringBuffer)
|
foreach (var item in ringBuffer)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ringBuffer.Clear();
|
ringBuffer.Clear();
|
||||||
@ -228,8 +228,8 @@ namespace ObservableCollections
|
|||||||
var oldItem = ringBuffer[e.NewStartingIndex];
|
var oldItem = ringBuffer[e.NewStartingIndex];
|
||||||
ringBuffer[e.NewStartingIndex] = v;
|
ringBuffer[e.NewStartingIndex] = v;
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldItem);
|
filter.InvokeOnRemove(oldItem, e);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NotifyCollectionChangedAction.Move:
|
case NotifyCollectionChangedAction.Move:
|
||||||
|
@ -134,7 +134,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
var v = (e.NewItem, selector(e.NewItem));
|
||||||
stack.Push(v);
|
stack.Push(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
var v = (item, selector(item));
|
var v = (item, selector(item));
|
||||||
stack.Push(v);
|
stack.Push(v);
|
||||||
filter.InvokeOnAdd(v);
|
filter.InvokeOnAdd(v, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -151,7 +151,7 @@ namespace ObservableCollections
|
|||||||
if (e.IsSingleItem)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = stack.Pop();
|
var v = stack.Pop();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -159,7 +159,7 @@ namespace ObservableCollections
|
|||||||
for (int i = 0; i < len; i++)
|
for (int i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
var v = stack.Pop();
|
var v = stack.Pop();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v.Item1, v.Item2, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -168,7 +168,7 @@ namespace ObservableCollections
|
|||||||
{
|
{
|
||||||
foreach (var item in stack)
|
foreach (var item in stack)
|
||||||
{
|
{
|
||||||
filter.InvokeOnRemove(item);
|
filter.InvokeOnRemove(item, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stack.Clear();
|
stack.Clear();
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ObservableCollections
|
namespace ObservableCollections
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ namespace ObservableCollections.Tests
|
|||||||
return this.filter.Invoke(value, view);
|
return this.filter.Invoke(value, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, T value, ViewContainer<T> view)
|
public void OnCollectionChanged(ChangedKind changedKind, T value, ViewContainer<T> view, in NotifyCollectionChangedEventArgs<T> eventArgs)
|
||||||
{
|
{
|
||||||
CalledOnCollectionChanged.Add((changedKind, value, view));
|
CalledOnCollectionChanged.Add((changedKind, value, view));
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ namespace ObservableCollections.Tests
|
|||||||
return this.filter.Invoke(value, view);
|
return this.filter.Invoke(value, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnCollectionChanged(ChangedKind changedKind, KeyValuePair<T, T> value, ViewContainer<T> view)
|
public void OnCollectionChanged(ChangedKind changedKind, KeyValuePair<T, T> value, ViewContainer<T> view, in NotifyCollectionChangedEventArgs<KeyValuePair<T, T>> eventArgs)
|
||||||
{
|
{
|
||||||
CalledOnCollectionChanged.Add((changedKind, value, view));
|
CalledOnCollectionChanged.Add((changedKind, value, view));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user