using System.Linq; using DryIoc; using Prism.Events; using Prism.Regions; namespace MaterialModernWPF.Service { public class CalculationPackageContainer { private readonly IRegionManager _regionManager; private readonly IResolver _resolver; public Package[] CalculationPackages { get; } public CalculationPackageContainer( IEventAggregator eventAggregator, IRegionManager regionManager, IResolver resolver) { _regionManager = regionManager; _resolver = resolver; CalculationPackages = resolver.ResolveMany().ToArray(); eventAggregator.GetEvent().Subscribe(SelectionChanged); } private void SelectionChanged((Package sender, bool isSelected) payload) { var viewKey = payload.sender.GetType().FullName; var region = _regionManager.Regions[Constants.PackagesRegion]; if (payload.isSelected) { var view = _resolver.Resolve(payload.sender.CalculationViewType); region.Add(view, viewKey); } else { var view = region.GetView(viewKey); region.Remove(view); } } } }