private void OnDataSourcesChanged(IEnumerable <IDataSourceViewModel> oldValue, IEnumerable <IDataSourceViewModel> newValue) { var old = oldValue as INotifyCollectionChanged; if (old != null) { old.CollectionChanged -= ItemsSourceOnCollectionChanged; } FilteredItemsSource.Clear(); if (newValue != null) { foreach (IDataSourceViewModel model in newValue) { if (PassesFilter(model)) { FilteredItemsSource.Add(model); } } var @new = newValue as INotifyCollectionChanged; if (@new != null) { @new.CollectionChanged += ItemsSourceOnCollectionChanged; } } }
private void FilterLoadFunction(object args) { RoutedEventArgs routedEventArgs = args as RoutedEventArgs; DataGridColumnHeader columnHeader = (routedEventArgs.OriginalSource as ToggleExtend).GetParent <DataGridColumnHeader>(); DataGridColumn dataGridColumn = columnHeader.Column; OptionColumnInfo = new OptionColumnInfo(dataGridColumn, DataGridExtend); RoutedEventArgs routedEvent = new RoutedEventArgs(DataGridExtend.InitFilterColumnEvent, OptionColumnInfo.PropertyPath); DataGridExtend.RaiseEvent(routedEvent); ObservableCollection <FilterKeyValue> filter = new ObservableCollection <FilterKeyValue>(); if (FilteredItemsSource == null) { FilteredItemsSource = new ObservableCollection <FilterKeyValue>(); foreach (var item in DataGridExtend.FilteredItemsSource) { if (item is ICateoryFilter cateory) { FilterKeyValue filterKeyValue = new FilterKeyValue(); filterKeyValue.DiaplayValue = cateory.FilterColumnValue?.ToString(); filterKeyValue.ID = cateory.ID; FilteredItemsSource.Add(filterKeyValue); } } } else { foreach (var item in DataGridExtend.FilteredItemsSource) { if (item is ICateoryFilter cateory) { if (FilteredItemsSource.Where(p => p.ID == cateory.ID).Count() > 0) { FilterKeyValue filterKeyValue = FilteredItemsSource.Where(p => p.ID == cateory.ID).ToList()[0]; filterKeyValue.DiaplayValue = cateory.FilterColumnValue?.ToString(); } else { FilterKeyValue filterKeyValue = new FilterKeyValue(); filterKeyValue.DiaplayValue = cateory.FilterColumnValue?.ToString(); FilteredItemsSource.Add(filterKeyValue); } } } } foreach (var item in FilteredItemsSource) { if (filter.Where(p => p.DiaplayValue == item.DiaplayValue).ToList().Count <= 0) { filter.Add(item); } } CategoryFilter = filter; }