Move is Move
This commit is contained in:
parent
f8ba09ac23
commit
b577d9a226
@ -12,7 +12,7 @@ namespace ObservableCollections
|
|||||||
|
|
||||||
public enum ChangedKind
|
public enum ChangedKind
|
||||||
{
|
{
|
||||||
Add, Remove
|
Add, Remove, Move
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SynchronizedViewFilter<T, TView> : ISynchronizedViewFilter<T, TView>
|
public class SynchronizedViewFilter<T, TView> : ISynchronizedViewFilter<T, TView>
|
||||||
@ -96,6 +96,16 @@ namespace ObservableCollections
|
|||||||
filter.OnCollectionChanged(ChangedKind.Remove, value, view);
|
filter.OnCollectionChanged(ChangedKind.Remove, value, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, (T value, TView view) value)
|
||||||
|
{
|
||||||
|
InvokeOnMove(filter, value.value, value.view);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void InvokeOnMove<T, TView>(this ISynchronizedViewFilter<T, TView> filter, T value, TView view)
|
||||||
|
{
|
||||||
|
filter.OnCollectionChanged(ChangedKind.Move, value, view);
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
if (filter.IsMatch(value, view))
|
if (filter.IsMatch(value, view))
|
||||||
|
@ -145,7 +145,6 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
case NotifyCollectionChangedAction.Replace:
|
case NotifyCollectionChangedAction.Replace:
|
||||||
{
|
{
|
||||||
if (dict.Remove(e.OldItem.Key, out var oldView))
|
if (dict.Remove(e.OldItem.Key, out var oldView))
|
||||||
@ -171,6 +170,7 @@ namespace ObservableCollections
|
|||||||
dict.Clear();
|
dict.Clear();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Move: // ObservableDictionary have no Move operation.
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -295,7 +295,6 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
case NotifyCollectionChangedAction.Replace:
|
case NotifyCollectionChangedAction.Replace:
|
||||||
{
|
{
|
||||||
var k = new KeyValuePair<TKey, TValue>(e.OldItem.Key, e.OldItem.Value);
|
var k = new KeyValuePair<TKey, TValue>(e.OldItem.Key, e.OldItem.Value);
|
||||||
@ -322,6 +321,7 @@ namespace ObservableCollections
|
|||||||
dict.Clear();
|
dict.Clear();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Move: // ObservableDictionary have no Move operation.
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -454,7 +454,6 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
case NotifyCollectionChangedAction.Replace:
|
case NotifyCollectionChangedAction.Replace:
|
||||||
{
|
{
|
||||||
if (viewMap.Remove(e.OldItem.Key, out var view))
|
if (viewMap.Remove(e.OldItem.Key, out var view))
|
||||||
@ -485,6 +484,7 @@ namespace ObservableCollections
|
|||||||
viewMap.Clear();
|
viewMap.Clear();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Move: // ObservableDictionary have no Move operation.
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
using ObservableCollections.Internal;
|
using ObservableCollections.Internal;
|
||||||
using System;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace ObservableCollections
|
namespace ObservableCollections
|
||||||
{
|
{
|
||||||
@ -211,9 +208,7 @@ namespace ObservableCollections
|
|||||||
list.RemoveAt(e.OldStartingIndex);
|
list.RemoveAt(e.OldStartingIndex);
|
||||||
list.Insert(e.NewStartingIndex, removeItem);
|
list.Insert(e.NewStartingIndex, removeItem);
|
||||||
|
|
||||||
// TODO:???
|
filter.InvokeOnMove(removeItem);
|
||||||
//filter.InvokeOnRemove(removeItem);
|
|
||||||
//filter.InvokeOnAdd(v);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -380,9 +375,8 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Replace:
|
case NotifyCollectionChangedAction.Replace:
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
// ObservableList does not support replace range
|
// ObservableList does not support replace range
|
||||||
// Replace is remove old item and insert new item(same index on replace, difference index on move).
|
// Replace is remove old item and insert new item.
|
||||||
{
|
{
|
||||||
var oldValue = e.OldItem;
|
var oldValue = e.OldItem;
|
||||||
list.Remove((oldValue, identitySelector(oldValue)), out var oldView);
|
list.Remove((oldValue, identitySelector(oldValue)), out var oldView);
|
||||||
@ -396,6 +390,16 @@ namespace ObservableCollections
|
|||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Move:
|
||||||
|
{
|
||||||
|
// Move(index change) does not affect sorted list.
|
||||||
|
var oldValue = e.OldItem;
|
||||||
|
if (list.TryGetValue((oldValue, identitySelector(oldValue)), out var view))
|
||||||
|
{
|
||||||
|
filter.InvokeOnMove(view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
if (!filter.IsNullFilter())
|
if (!filter.IsNullFilter())
|
||||||
{
|
{
|
||||||
@ -593,9 +597,8 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Replace:
|
case NotifyCollectionChangedAction.Replace:
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
// ObservableList does not support replace range
|
// ObservableList does not support replace range
|
||||||
// Replace is remove old item and insert new item(same index on replace, difference index on move).
|
// Replace is remove old item and insert new item.
|
||||||
{
|
{
|
||||||
var oldValue = e.OldItem;
|
var oldValue = e.OldItem;
|
||||||
var oldKey = identitySelector(oldValue);
|
var oldKey = identitySelector(oldValue);
|
||||||
@ -614,6 +617,17 @@ namespace ObservableCollections
|
|||||||
filter.InvokeOnAdd(value, view);
|
filter.InvokeOnAdd(value, view);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Move:
|
||||||
|
// Move(index change) does not affect soreted dict.
|
||||||
|
{
|
||||||
|
var value = e.OldItem;
|
||||||
|
var key = identitySelector(value);
|
||||||
|
if (viewMap.TryGetValue(key, out var view))
|
||||||
|
{
|
||||||
|
filter.InvokeOnMove(value, view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
if (!filter.IsNullFilter())
|
if (!filter.IsNullFilter())
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user