/// <summary> /// Перезаполнение главного DataGrid страницы с учётом фильтров /// </summary> public static void PageDataGrid_RefillingWithFilters(DataGrid dataGrid, FilterCriterias filterCriterias, Predicate <object> predicate) { var pageGridCollectionView = CollectionViewSource.GetDefaultView(dataGrid.ItemsSource); pageGridCollectionView.Filter = filterCriterias.IsEmpty ? null : predicate; dataGrid.ItemsSource = pageGridCollectionView; pageGridCollectionView.Refresh(); }
/// <summary> /// Сервисный метод фильтрующего главного DataGrid страницы - применения фильтра. /// </summary> public static void Service_PageDataGridPopupFilterConfirm(object senderIsButtonOrTextBox, FilterCriterias filterCriterias) { var popupControl = senderIsButtonOrTextBox as Control; // Control вызвавший событие (TextBox или Button) if (popupControl == null) { return; } var grid = popupControl.Parent as Grid; // Grid-обёртка полей контекстного меню if (grid == null) { return; } var menuItem = grid.Parent as MenuItem; // MenuItem контекстного меню if (menuItem == null) { return; } var contextMenu = menuItem.Parent as ContextMenu; // Контекстное меню DataGrid if (contextMenu == null) { return; } var textBlocks = grid.Children.OfType <TextBlock>().ToArray(); var textBoxes = grid.Children.OfType <TextBox>().ToArray(); if (textBlocks.Length != 1 || textBoxes.Length != 1) { return; } var popupFilterName = textBlocks[0]; // Контрол для надписи var popupFilterValue = textBoxes[0]; // Поле ввода var columnName = (string)popupFilterValue.Tag; // Получения столбца из свойства Tag поля ввода var columnDysplayedName = popupFilterName.Text; // Получение отображаемого имени столбца из надписи var filterValue = popupFilterValue.Text.Trim(); // Получение значения фильтра if (string.IsNullOrWhiteSpace(filterValue)) { return; } // Добавление/обновления критерия фильтрации и скрытие контекстного меню filterCriterias.UpdateCriteria(columnName, filterValue, columnDysplayedName); contextMenu.Visibility = Visibility.Collapsed; }
/// <summary> /// Перезаполнение фильтрующего DataGrid и скрытие/отображение соответствующих панелей, /// в зависимости от критериев фильтра. /// </summary> /// <param name="filtersTable">DataGrid отображения фильтра</param> /// <param name="filterCriterias">Критерии фильтрации страницы</param> /// <param name="filterDataPanel">Панель содержащая DataGrid отображения фильтра и кнопку удаления</param> /// <param name="filterCoverPanel">Панель-заглушка для пользователя с сообщением</param> public static void RefillingFilterTableAndShowHidePanel(DataGrid filtersTable, FilterCriterias filterCriterias, Panel filterDataPanel, Panel filterCoverPanel) { const Visibility show = Visibility.Visible; const Visibility hide = Visibility.Collapsed; // В зависимости от наличия критериев фильтрации, скрываем/отображаем соответсвующие панели filterDataPanel.Visibility = filterCriterias.IsEmpty ? hide : show; filterCoverPanel.Visibility = filterCriterias.IsEmpty ? show : hide; // Перезаполняем DataGrid отображения фильтра filtersTable.ItemsSource = filterCriterias.DisplayedDictionary; var view = CollectionViewSource.GetDefaultView(filtersTable.ItemsSource); view.Refresh(); }