protected override void OnOpened(EventArgs e)
        {
            base.OnOpened(e);

            _grid = this.GetVisualParent<CustomDataGrid>();
            var header = this.GetVisualParent<DataGridColumnHeader>();
            _column = header.Column;

            var listCollectionView = _grid.Items.SourceCollection as ListCollectionView;
            if (listCollectionView != null && (listCollectionView.IsAddingNew || listCollectionView.IsEditingItem))
            {
                IsOpen = false;
                return;
            }

            if (GetFiltersContainer(_grid) == null)
            {
                var container = new FiltersContainer();
                SetFiltersContainer(_grid, container);
            }

            if (_column == null) return;

            var itemsOfSourceCollection = ((ListCollectionView) _grid.Items.SourceCollection).SourceCollection.Cast<object>();

            var namesCollection = GetNamesOfItemsFromSourceCollection(itemsOfSourceCollection);

            if (namesCollection == null) return;

            var filterItems = namesCollection.ConvertAll(r => new FilterItem(r) {IsChecked = true});

            ResetToLastSelectedItemsOfFiltering(filterItems);

            FilterItems = CollectionViewSource.GetDefaultView(filterItems);
            FilterItems.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

            SearchContent = "";
        }
        private void MakeFilter(FiltersContainer container)
        {
            var listCollectionView = ((ListCollectionView) _grid.Items.SourceCollection);

            listCollectionView.CustomSort = null;
            _grid.Columns.ToList().ForEach(r => r.SortDirection = null);
            _grid.Items.Filter += container.MakeFilterOnGrid;
        }
 public static void SetFiltersContainer(DataGrid grid, FiltersContainer value)
 {
     grid.SetValue(FiltersContainerProperty, value);
 }