private void ItemsSourceOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: for (var i = 0; i < e.NewItems.Count; ++i) { var model = (IDataSourceViewModel)e.NewItems[i]; if (PassesFilter(model)) { var sourceIndex = e.NewStartingIndex + i; var filteredIndex = FindFilteredIndex(sourceIndex); FilteredItemsSource.Insert(filteredIndex, model); } } break; case NotifyCollectionChangedAction.Remove: foreach (IDataSourceViewModel model in e.OldItems) { FilteredItemsSource.Remove(model); } break; case NotifyCollectionChangedAction.Reset: FilteredItemsSource.Clear(); break; default: throw new NotImplementedException(); } UpdateNoDataSourcesMessage(); }
private void ItemsSourceOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: for (int i = 0; i < e.NewItems.Count; ++i) { var model = (IDataSourceViewModel)e.NewItems[i]; if (PassesFilter(model)) { int sourceIndex = e.NewStartingIndex + i; int filteredIndex = FindFilteredIndex(sourceIndex); FilteredItemsSource.Insert(filteredIndex, model); } } break; case NotifyCollectionChangedAction.Remove: foreach (IDataSourceViewModel model in e.OldItems) { FilteredItemsSource.Remove(model); } break; /*case NotifyCollectionChangedAction.Reset: * foreach (IDataSourceViewModel model in _dataSourceCopy) * { * model.PropertyChanged -= DataSourceOnPropertyChanged; * } * _dataSourceCopy.Clear(); * FilteredItemsSource.Clear(); * break;*/ default: throw new NotImplementedException(); } }