public ExplorerViewModel(Profile <FI, DI, FSI> profile) { _profile = profile; var notificationSources = from m in _profile.GetNotificationSources() select m.ToViewModel(); _notificationViewModel = new NotificationBarViewModel(notificationSources.ToArray()); _navigationViewModel = new NavigationRootViewModel <FI, DI, FSI>(_profile); _currentBrowserViewModel = new DirectoryViewerViewModel <FI, DI, FSI>(_profile, _viewSize); _breadcrumbViewModel = new BreadcrumbViewModel <FI, DI, FSI>(_profile, this); _searchViewModel = new SearchViewModel <FI, DI, FSI>(_profile); _navigationViewModel.DirectoryChanged += dirChangedHandler; if (CurrentEntryBrowserViewModel != null) { CurrentEntryBrowserViewModel.DirectoryChanged += dirChangedHandler; } _breadcrumbViewModel.DirectoryChanged += dirChangedHandler; _searchViewModel.DirectoryChanged += dirChangedHandler; ChangeCurrentBrowserViewModel(_profile.ConstructDirectoryModel(profile.RootDirectories[0])); setupCommands(); }
/// <summary> /// Subdir can only initalized after an TreeViewItem called SubDirectories /// </summary> private void setupSubdir() { if (EmbeddedDirectoryModel == null) { return; } if (!_isDirectory || EmbeddedDirectoryModel.IsLink) { _subDirectories = new AsyncObservableCollection <NavigationItemViewModel <FI, DI, FSI> >(); } else { bool bountyPlaced = false; DirectoryModel <FI, DI, FSI> bounty = null; _subDirectories = new AsyncObservableCollection <NavigationItemViewModel <FI, DI, FSI> > ( DispatcherPriority.Background, from item in (_embeddedDirectoryModel.GetSubEntries(true, "*", true, false)) select new NavigationItemViewModel <FI, DI, FSI>(_rootModel, this, item as DirectoryModel <FI, DI, FSI>) { IsSubItem = true }, //task Func () => { if (_subDirectories.Contains(dummyNode)) { _subDirectories.Clear(); } bountyPlaced = false; bounty = _rootModel.Bounty; }, //Begina action (itemAdded) => { //Debug.WriteLine("Added " + itemAdded.EmbeddedDirectoryModel.EmbeddedEntry.ToString()); if (!bountyPlaced && _rootModel.Bounty != null && itemAdded.EmbeddedEntryModel.CustomPosition == -1) { if (itemAdded.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty)) { //BountyIsUp(); bountyPlaced = true; itemAdded.PlaceBounty(); } } }, (removedItem) => { //Debug.WriteLine("Removed " + removedItem.EmbeddedDirectoryModel.EmbeddedEntry.ToString()); }, (itemList, ex) => { if (ex != null) { #if DEBUG Debug.WriteLine(ex.Message); throw ex; #endif } else { _isInited = true; #region Breadcrumb related code //Custom menu if it's first item of breadcrumb. if (IsFirstItem && _rootModel is BreadcrumbViewModel <FI, DI, FSI> ) { BreadcrumbViewModel <FI, DI, FSI> rootBreadcrumbVM = _rootModel as BreadcrumbViewModel <FI, DI, FSI>; int insertCount = 0; foreach (DI dir in Profile.RootDirectories) { DirectoryModel <FI, DI, FSI> newDirModel = Profile.ConstructDirectoryModel(dir); if (!_rootModel.SelectedModel.Equals(dir)) { NavigationItemViewModel <FI, DI, FSI> newItem = new NavigationItemViewModel <FI, DI, FSI>(_rootModel, null, newDirModel) { CustomPosition = ++insertCount }; _subDirectories.Add(newItem); } } foreach (var rootSubDir in rootBreadcrumbVM.Hierarchy) { if (!rootSubDir.IsItemVisible) { NavigationItemViewModel <FI, DI, FSI> cloneItem = new NavigationItemViewModel <FI, DI, FSI>(_rootModel, rootSubDir.ParentViewModel, rootSubDir.EmbeddedEntryModel) { CustomPosition = ++insertCount }; _subDirectories.Add(cloneItem); //_subDirectories.Insert(0, rootSubDir); } } //new NavigationItemViewModel<FI, DI, FSI>(_rootModel, rootSubDir.ParentViewModel, //rootSubDir.EmbeddedDirectoryModel)); if (insertCount > 0) { _subDirectories.Insert(insertCount++, new NavigationItemViewModel <FI, DI, FSI>() { CustomPosition = 0 }); } } #endregion #region Directory releated code if (bounty != null) { if (!bountyPlaced) { //BountyIsUp(); foreach (NavigationItemViewModel <FI, DI, FSI> subDirVM in itemList.OrderBy((nivm) => { return(-nivm.EmbeddedEntryModel.CustomPosition); })) { if (subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty)) { subDirVM.PlaceBounty(); break; } else { subDirVM.CollapseAll(); } } } else { foreach (NavigationItemViewModel <FI, DI, FSI> subDirVM in itemList) { if (!subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(bounty)) { subDirVM.CollapseAll(); } } } } #endregion //for (int i = 1; i < itemList.Count; i++) //{ // NavigationItemViewModel<FI, DI, FSI> subDirVM = itemList[i]; // if (subDirVM.EmbeddedDirectoryModel.EqualsOrHasChild(_rootModel.Bounty)) // { // subDirVM.PlaceBounty(); // break; // } //} _subDirectories.ChangeSortMethod(SortCriteria.sortByName, ListSortDirection.Ascending); } } ); if (IsDirectory && EmbeddedDirectoryModel.HasSubDirectories) { _subDirectories.Add(dummyNode); } //if (!IsFirstItem) } }