public virtual void SourceItemChanged(object sender, PropertyChangedEventArgs e) { var item = (T)sender; var checkItem = ListHelper.CheckItem(item, query); if (checkItem) { if (query.IsGlobalParameter(e.PropertyName)) { UpdateFilter(); } else { int index = IndexOf(item); if (index < 0) { base.Add(item); } else { base.OnItemPropertyChanged(item, index, e); } } } else { int index = IndexOf(item); if (index >= 0) { Remove(item, index); } } }
public virtual void SourceListChanged(object sender, NotifyCollectionChangedEventArgs e) { T newItem = e.NewItems == null ? default(T) : e.NewItems.TypeOf <T>().FirstOrDefault(); T oldItem = e.OldItems == null ? default(T) : e.OldItems.TypeOf <T>().FirstOrDefault(); switch (e.Action) { case NotifyCollectionChangedAction.Reset: UpdateFilter(); break; case NotifyCollectionChangedAction.Move: if (newItem != null) { SourceItemChanged(newItem, new PropertyChangedEventArgs(string.Empty)); } break; case NotifyCollectionChangedAction.Replace: if (oldItem != null) { Remove(oldItem); } goto case NotifyCollectionChangedAction.Add; case NotifyCollectionChangedAction.Remove: if (oldItem != null) { Remove(oldItem); } break; case NotifyCollectionChangedAction.Add: if (newItem != null && ListHelper.CheckItem(newItem, query)) { if (!query.IsEnabled && comparer == null) { base.Add(newItem); } else { base.Add(newItem); } } break; } }
public bool CheckItem(object item, object typedValue, CompareType comparer, IComparer comparision) { return(ListHelper.CheckItem(GetValue(item), typedValue, comparer, comparision)); }