private void UpdateFilters()
        {
            Log.Debug("Updating filters");

            if (_filterSchemes != null)
            {
                _filterSchemes.Schemes.CollectionChanged -= OnFilterSchemesCollectionChanged;
            }

            _filterSchemes = _filterSchemeManager.FilterSchemes;

            if (_filterSchemes != null)
            {
                _filterSchemes.Schemes.CollectionChanged += OnFilterSchemesCollectionChanged;
            }

            var newSchemes = new ObservableCollection <FilterScheme>();

            if (RawCollection == null)
            {
                _targetType = null;
            }
            else
            {
                _targetType = CollectionHelper.GetTargetType(RawCollection);
                if (_targetType != null)
                {
                    ((ICollection <FilterScheme>)newSchemes).AddRange((from scheme in _filterSchemes.Schemes
                                                                       where scheme.TargetType != null && _targetType.IsAssignableFromEx(scheme.TargetType)
                                                                       select scheme));
                }
            }

            newSchemes.Insert(0, NoFilterFilter);

            if (AvailableSchemes == null || !Catel.Collections.CollectionHelper.IsEqualTo(AvailableSchemes, newSchemes))
            {
                AvailableSchemes = newSchemes;

                var selectedFilter = _filterService.SelectedFilter ?? NoFilterFilter;
                SelectedFilterScheme = selectedFilter;
            }
        }
Пример #2
0
        private void UpdateFilterGroups()
        {
            var applicableFilterSchemes = new List <FilterScheme>();

            if (RawCollection is null)
            {
                _targetType = null;
            }
            else
            {
                _targetType = CollectionHelper.GetTargetType(RawCollection);

                if (_targetType != null && _filterSchemes != null)
                {
                    ((ICollection <FilterScheme>)applicableFilterSchemes).AddRange((from scheme in _filterSchemes.Schemes
                                                                                    where scheme.TargetType != null && _targetType.IsAssignableFromEx(scheme.TargetType)
                                                                                    select scheme));
                }
            }

            applicableFilterSchemes.Insert(0, _noFilterFilter);

            var filterGroups = (from filterScheme in applicableFilterSchemes
                                //where filterScheme.IsVisible
                                orderby filterScheme.FilterGroup, filterScheme.Title, filterScheme.CanDelete
                                group filterScheme by filterScheme.FilterGroup into g
                                select new FilterGroup(g.Key, g)).ToList();

            // Ensure no filter is at the top
            var noFilterGroup = filterGroups.First(x => x.Title == _noFilterFilter.FilterGroup);

            noFilterGroup.FilterSchemes.Remove(_noFilterFilter);
            noFilterGroup.FilterSchemes.Insert(0, _noFilterFilter);

            FilterGroups = filterGroups;
        }