コード例 #1
0
        private void Update()
        {
            var contextTypes = _context.GroupBy(c => c.GetType());
            var requirements = model.Requirements;

            foreach (var contextType in contextTypes)
            {
                if (IncludeUpperBreakdown && contextType.Key == typeof(BreakdownItem))
                {
                    foreach (var item in contextType.OfType <BreakdownItem>().Where(i => i.Parent != null))
                    {
                        foreach (var parent in item.Parents)
                        {
                            _context.Add(parent);
                        }
                    }
                }

                // continuous filtering refinement
                requirements = requirements.Where(r => contextType.Any(c => c.IsContextFor(r)));
            }

            RequirementSets = requirements.SelectMany(rs => rs.RequirementSets).Distinct()
                              .Select(rs => new RequirementSetView(rs))
                              .ToList();

            // requirements from sets
            Requirements = RequirementSets.SelectMany(rs => rs.Requirements).ToList();

            // requirements used directly without property set
            var map   = new Dictionary <int, RequirementSetView>();
            var check = new HashSet <int>(Requirements.Select(r => r.PropertyTemplate.EntityLabel));
            var directRequirements = requirements
                                     .SelectMany(rs => rs.Requirements)
                                     .Where(r => check.Add(r.EntityLabel) && r is IfcSimplePropertyTemplate)
                                     .Select(r => new RequirementView((IfcSimplePropertyTemplate)r, map));

            // add direct properties and their parent property sets (if any)
            Requirements.AddRange(directRequirements);
            RequirementSets.AddRange(map.Values);

            // keep information about the primary filter
            LevelsOfInformationNeeded = requirements.ToList();

            // notify about the change of both
            OnPropertyChanged(nameof(Requirements));
            OnPropertyChanged(nameof(RequirementSets));
            OnPropertyChanged(nameof(LevelsOfInformationNeeded));

            // raise event
            ContextUpdatedEvent?.Invoke(this, EventArgs.Empty);
        }
コード例 #2
0
ファイル: SingleContext.cs プロジェクト: andyward/DSSTools
        private void Update()
        {
            Actor         = selector.ContextViews.OfType <ActorView>().FirstOrDefault();
            BreakdownItem = selector.ContextViews.OfType <BreakdownItemView>().FirstOrDefault();
            Milestone     = selector.ContextViews.OfType <MilestoneView>().FirstOrDefault();
            Reason        = selector.ContextViews.OfType <ReasonView>().FirstOrDefault();

            OnPropertyChanged(nameof(Actor));
            OnPropertyChanged(nameof(BreakdownItem));
            OnPropertyChanged(nameof(Milestone));
            OnPropertyChanged(nameof(Reason));
            OnPropertyChanged(nameof(IsComplete));

            ContextUpdatedEvent?.Invoke(this, EventArgs.Empty);
        }