public ErrorsVM([NotNull] List <IError> errors) { ErrorsOrig = errors; var errorVMs = errors.Where(w => !string.IsNullOrEmpty(w.Message)).GroupBy(g => g.Group) .Select(s => { ErrorModelBase errModel; if (s.Skip(1).Any()) { var errList = new ErrorModelList(s.ToList()); errList.SameErrors.Iterate(e => e.SelectionChanged += ErrModel_SelectionChanged); errModel = errList; } else { errModel = new ErrorModelOne(s.First(), null); } errModel.SelectionChanged += ErrModel_SelectionChanged; return(errModel); }); errorsSrc = new SourceList <ErrorModelBase>(); errorsSrc.AddRange(errorVMs); errorsSrc.Connect() .ObserveOnDispatcher() .Bind(out var data) .Subscribe(); Errors = data; IsDublicateBlocksEnabled = errors.Any(e => e.Message?.StartsWith("Дублирование блоков") == true || e.Message?.StartsWith("Наложение блоков") == true); ErrorsCountInfo = errors.Count; var canCollapse = errorsSrc.CountChanged.Select(s => Errors.OfType <ErrorModelList>().Any(a => a.IsExpanded)); CollapseAll = CreateCommand(CollapseAllExecute, canCollapse); var canExpand = errorsSrc.CountChanged.Select(s => Errors.OfType <ErrorModelList>().Any(a => a.SameErrors != null && !a.IsExpanded)); ExpandeAll = CreateCommand(ExpandedAllExecute, canExpand); ExportToExcel = CreateCommand(ExportToExcelExecute); ExportToTxt = CreateCommand(ExportToTxtExecute); DeleteSelectedDublicateBlocks = CreateCommand(OnDeleteSelectedDublicateBlocksExecute); DeleteAllDublicateBlocks = CreateCommand(OnDeleteAllDublicateBlocksExecute); DeleteError = CreateCommand <ErrorModelBase>(DeleteErrorExec); var visualsEnts = ErrorsOrig.SelectManyNulless(s => s.Visuals).ToList(); if (visualsEnts.Any()) { errorsVisual = new VisualTransientSimple(visualsEnts) { VisualIsOn = true }; } }
public ErrorsVM([NotNull] List <IError> errors) { ErrorsOrig = errors; // Группировка ошибок // "Дублирование блоков" Errors = new ReactiveList <ErrorModelBase>(errors.Where(w => !string.IsNullOrEmpty(w.Message)).GroupBy(g => g.Group) .Select(s => { ErrorModelBase errModel; if (s.Skip(1).Any()) { var errList = new ErrorModelList(s.ToList()); errList.SameErrors.Iterate(e => e.SelectionChanged += ErrModel_SelectionChanged); errModel = errList; } else { errModel = new ErrorModelOne(s.First(), null); } errModel.SelectionChanged += ErrModel_SelectionChanged; return(errModel); }).ToList()); IsDublicateBlocksEnabled = errors.Any(e => e.Message?.StartsWith("Дублирование блоков") ?? false); ErrorsCountInfo = errors.Count; var canCollapse = Errors.CountChanged.Select(s => Errors.OfType <ErrorModelList>().Any(a => a.IsExpanded)); CollapseAll = CreateCommand(CollapseAllExecute, canCollapse); var canExpand = Errors.CountChanged.Select(s => Errors.OfType <ErrorModelList>().Any(a => a.SameErrors != null && !a.IsExpanded)); ExpandeAll = CreateCommand(ExpandedAllExecute, canExpand); ExportToExcel = CreateCommand(ExportToExcelExecute); ExportToTxt = CreateCommand(ExportToTxtExecute); DeleteSelectedDublicateBlocks = CreateCommand(OnDeleteSelectedDublicateBlocksExecute); DeleteError = CreateCommand <ErrorModelBase>(DeleteErrorExec); var visualsEnts = ErrorsOrig.SelectManyNulless(s => s.Visuals).ToList(); if (visualsEnts.Any()) { errorsVisual = new VisualTransientSimple(visualsEnts) { VisualIsOn = true }; } }