public TagsManagerMainView(ITagsManager tagsManager, TagsManagerMainViewModel model, 
            IIdeaManager ideaManager, IRelationManager relationManager, IBlockManager blockManager, IMaterialManager materialManager)
        {
            _relationManager = relationManager;
            _blockManager = blockManager;
            var db = new AllDb()
            {
                RelationManager = _relationManager,
                IdeaManager = ideaManager,
                BlockManager = _blockManager,
                TagsManager = tagsManager,
                MaterialManager = materialManager
            };
            InitializeComponent();
            _tagHelper = new TagTreeHelper(treeList, db);
            _tagHelper.ReloadTree();

            model.NodeAdded += dto =>
            {
                dto.AddNodeToTree(treeList);
                treeList.CurrentItem = dto;
            };

            model.NodeAnnihilated += dto => dto.AnnihilateNode(treeList);

            model.MaterialUpdate += dto => dto.UpdateMaterialInTree(treeList);

            Loaded += (sender, args) =>
            {
                DataContext = model;

                treeList.View.ValidateCell += (o, e) =>
                {
                    var wrong = Path.GetInvalidFileNameChars();
                    if (e.Value.ToString().Any(wrong.Contains))
                        e.IsValid = false;
                };

                treeList.View.PreviewKeyDown += (o, eventArgs) =>
                {
                    if (eventArgs.Key == Key.Enter || eventArgs.Key == Key.Return)
                    {
                        eventArgs.Handled = true;
                        treeList.View.CloseEditor();
                        RenameCurrent();
                    }
                };

                treeList.View.ShownEditor += ViewOnShownEditor;

                model.RenameTag += dto => Dispatcher.Invoke(() =>
                {
                    treeList.View.AllowEditing = true;
                    treeList.View.ShowEditor(true);
                }, DispatcherPriority.Background);

                model.Refresh += () => Dispatcher.Invoke(() => _tagHelper.ReloadTree(),
                    DispatcherPriority.Background);
            };
        }
        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();
        }