public TagSelectorView(ITagsManager tagsManager, IIdeaManager ideaManager, 
            IBlockManager blockManager, IRelationManager relationManager, ISettingsService settingsService, IMaterialManager materialManager)
        {
            _settingsService = settingsService;
            var allDb = new AllDb
            {
                RelationManager = relationManager,
                BlockManager = blockManager,
                IdeaManager = ideaManager,
                TagsManager = tagsManager,
                MaterialManager = materialManager
            };

            InitializeComponent();
            Loaded += (sender, args) =>
            {
                var model = RegionContext.GetObservableContext(this).Value as ISelectTagRegionView;

                if (model != null)
                {
                    var selectItem = new DelegateCommand<Guid>(id =>
                    {
                        if (model.TargetType == typeof(Tag))
                            _settingsService.AddRecentTag(id);
                        if (model.TargetType == typeof(Idea))
                            _settingsService.AddRecentIdea(id);
                        if (model.TargetType == typeof(Block))
                            _settingsService.AddRecentBlock(id);
                        if (model.TargetType == typeof(Comment))
                            _settingsService.AddRecentComment(id);
                        if (model.TargetType == typeof(Guidable))
                            _settingsService.AddRecentGuidable(id);

                        model.OkCommand.Execute(id);
                    });
                    var items = model.TargetType == typeof (Tag)
                        ? _settingsService.GetRecentTags()
                        : model.TargetType == typeof (Idea)
                            ? _settingsService.GetRecentIdeas()
                            : model.TargetType == typeof (Block)
                                ? _settingsService.GetRecentBlocks()
                                : model.TargetType == typeof (Guidable)
                                    ? _settingsService.GetRecentGuidables()
                                    : _settingsService.GetRecentComments();

                    var recent = new BarSubItem() {CategoryName = "BuiltInMenus", Content = "Recent"};
                    MainMenu.Items.Add(recent);
                    foreach (var item in items.OrderByDescending(i => i.Order))
                        recent.Items.Add(new BarButtonItem{Content = item.Name,
                            CommandParameter = item.Id, Command = selectItem});
                }
                DataContext = model;
            };
            _tagHelper = new TagTreeHelper(treeList, allDb);
            _tagHelper.ReloadTree();
        }
        public CreateIdeaDlgViewModel(ITagsManager tagsManager, IParticlesManager particleManager,
            IIdeaManager ideaManager, IBlockManager blockManager, IEventAggregator eventAggregator, ISettingsService settingsService)
        {
            _tagsManager = tagsManager;
            _particleManager = particleManager;
            _ideaManager = ideaManager;
            _blockManager = blockManager;
            _eventAggregator = eventAggregator;
            _settingsService = settingsService;

            RecentTags = new List<RecentTag>();
            RecentTags.AddRange(
                settingsService.GetRecentTags()
                    .Select(a => new RecentTag() {Id = a.Id, TagLong = a.Name,
                                                  TagShort = a.Name.Substring(0, Math.Min(a.Name.Length, 20)) + (Math.Min(a.Name.Length, 20) == 20 ? "...;" : ";")
                    }));

            AddParticleVm = new AddParticleViewViewModel(_particleManager);
            OkCommand = new DelegateCommand<Window>((wnd) =>
            {
                var idea = _ideaManager.CreateIdea(Caption);
                if (_parentTag != null)
                    _ideaManager.AddTagToIdea(idea, _parentTag);

                if (AddParticleVm.AddParticle)
                    if (AddParticleVm.UseNewParticle)
                    {
                        var particle = _particleManager.CreateParticle(AddParticleVm.NewParticle.Material,
                            AddParticleVm.NewParticle.Begin, AddParticleVm.NewParticle.End);
                        _blockManager.AddParticleToBlock(idea, particle);
                        ParticleId = particle.Id;
                    }
                    else if (AddParticleVm.UseExistParticle && AddParticleVm.ExistParticle.HasValue)
                    {
                        var particle = _particleManager.GetParticleById(AddParticleVm.ExistParticle.Value);
                        _blockManager.AddParticleToBlock(idea, particle);
                        ParticleId = particle.Id;
                    }

                IdeaId = idea.Id;
                _eventAggregator.GetEvent<BlockAddedEvent>().Publish(idea.Id);
                wnd.DialogResult = true;
                wnd.Close();
            }, wnd => !String.IsNullOrWhiteSpace(Caption));

            SelectTagCommand = new DelegateCommand(() =>
            {
                var dlg = new SelectTagDlg(typeof (Tag));
                var res = dlg.ShowDialog();
                if (res.HasValue && res.Value && dlg.Id.HasValue)
                {
                    _parentTag = _tagsManager.GetTagById(dlg.Id.Value);
                    TagCaption = _parentTag.Caption;
                    AddToTag = true;
                }
            });

            ClickTagCommand = new DelegateCommand<RecentTag>(rt =>
            {
                _parentTag = _tagsManager.GetTagById(rt.Id);
                TagCaption = _parentTag.Caption;
                AddToTag = true;
            });
        }