/// <summary> Перезаполнение плитками панель. </summary> private void FillPlates(GroupModes grpMode, bool ascend = true, string atrName = "") { // зачищаем имеющееся ClearPanel(); // группируем var readyMap = FilterSorterModule.GroupProcess(srcList, grpMode, ascend, atrName); bool isSeparable = readyMap.Count() > 1; // заполняем в соотвествии с группами foreach (var dirEnt in readyMap) { UniformGrid newGrid = new UniformGrid(); newGrid.VerticalAlignment = VerticalAlignment.Top; newGrid.Margin = new Thickness(0, 2, 0, 15); // разделитель с названием подпапки if (isSeparable) { entPlates.Children.Add(CreateSeparator(dirEnt.Key, newGrid)); } if (ListMode) { newGrid.Columns = 1; foreach (var entry in dirEnt.Value) { entry.CreateListPlate(); entry.ListHeight = (int)(oneLineHeight * sliderListHeight.Value) + 4; if (entry.lp.Parent != null) { MainWindow.RemoveChild(entry.lp.Parent, entry.lp); } newGrid.Children.Add(entry.lp); } } else { newGrid.Columns = (int)sliderGridCol.Value; foreach (var entry in dirEnt.Value) { entry.CreatePlate(); if (entry.vp.Parent != null) { MainWindow.RemoveChild(entry.vp.Parent, entry.vp); } newGrid.Children.Add(entry.vp); } } entPlates.Children.Add(newGrid); } readyMap.Clear(); Application.Current.Dispatcher.BeginInvoke((Action)(() => { SetTotalCountText($"Total: {srcList.Count()}"); })); }
///<summary> Обновление после изменения одного из контролов фильтра. </summary> private void FilterChanged(object sender, RoutedEventArgs e) { Stopwatch sw = new Stopwatch(); sw.Start(); string atrName = ""; // для проброса имени атрибута из названия пункта комбобокса сортировки GroupModes grpMode = GroupModes.NONE; switch (filterPanel.sortModeComBox.SelectedIndex) { case 0: { sortMode = FilterSorterModule.SortMode.NAME; grpMode = GroupModes.FIRST_CHAR; break; } case 1: { sortMode = FilterSorterModule.SortMode.DATE_ADD; grpMode = GroupModes.DATE_ADD; break; } case 2: { sortMode = FilterSorterModule.SortMode.DATE_CREATE; grpMode = GroupModes.DATE_CREATE; break; } case 3: { sortMode = FilterSorterModule.SortMode.DATE_MODIFIED; grpMode = GroupModes.DATE_MODIFIED; break; } case 4: { sortMode = FilterSorterModule.SortMode.RESOLUTION; grpMode = GroupModes.RESOLUTION; break; } case 5: { sortMode = FilterSorterModule.SortMode.ENTRYS_COUNT; grpMode = GroupModes.ENTRYS_COUNT; break; } case -1: goto case 0; default: { sortMode = FilterSorterModule.SortMode.ATTRIBUTE; grpMode = GroupModes.ATTRIBUTE; string selItemName = (filterPanel.sortModeComBox.SelectedItem as TextBlock).Text; atrName = selItemName.Substring(selItemName.IndexOf(" ") + 1); // отрезаем слово аттрибут break; } } bool grpEnabled = filterPanel.grpChkBox.IsChecked ?? false; bool ascend = filterPanel.ascendChkBox.IsChecked ?? false; bool broken = filterPanel.brokenChkBox.IsChecked ?? false; bool excepted = filterPanel.exceptedChkBox.IsChecked ?? false; if (!grpEnabled) { grpMode = GroupModes.FOLDER; } loadingPanel.Visibility = Visibility.Visible; Application.Current.Dispatcher.BeginInvoke((Action)(() => SetInfoText("Loading Plates!"))); pBar.Value = 50d; var filtStr = filterPanel.filterBox.Text; BackgroundWorker bw = new BackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork += (s, a) => { srcList = FilterSorterModule.FilterAndSort(baseList, filtStr, CatalogRoot.tagsList, sortMode, ascend, broken, excepted, atrName); }; bw.RunWorkerCompleted += (s, a) => { FillPlates(grpMode, ascend, atrName); filterPanel.FillSortCombo(); SetUiStateOpened(); Console.WriteLine($"FilterChanged {sw.ElapsedMilliseconds}ms"); sw.Stop(); }; bw.RunWorkerAsync(); }