/// <summary> /// Constructs a View model from a rectangles (images) that were loaded /// </summary> /// <param name="rects">The loaded rects</param> public LoadedImagesTreeViewModel(IEnumerable <PPRect> rects) { eventAggregator = ServiceLocator.Current.GetInstance <IEventAggregator>(); var folderImage = BitmapManager.LoadBitmap("folder.png"); folderImageVM = folderImage != null ? new ImageViewModel(folderImage) : null; //Paths = images.Select(x => x.ImagePath); FSEntries = CreateFSEntries(rects); Unload = new RelayCommand((x) => { //Task.Factory.StartNew(() => //{ var node = x as NodeVM; IEnumerable <string> paths = Enumerable.Empty <string>(); var nodesToUnload = new Stack <NodeVM>(); nodesToUnload.Push(node); while (nodesToUnload.Count > 0) { var currNode = nodesToUnload.Pop(); if (currNode.IsDirectory) { foreach (var childNode in currNode.Children) { nodesToUnload.Push(childNode); } } else { paths = paths.Append(currNode.Path); } } eventAggregator.GetEvent <UnloadImagesEvent>().Publish(new UnloadImagesPayload(paths)); //only uppon success if (RemoveNode(FSEntries, node)) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FSEntries))); } //}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }, (_) => true); OpenInFileExplorer = new RelayCommand((x) => { var path = ((NodeVM)x).Path; var explorerService = new Services.OpenFileExplorer(); if (System.IO.Directory.Exists(path) || System.IO.File.Exists(path)) { explorerService.ShowFileExplorer(path); } else { throw new InvalidOperationException($"Error occured, the file system entry {path} does not exist anymore"); } }, (_) => true); NodeRightClick = new RelayCommand((x) => { if (x is NodeVM node) { node.IsSelected = true; } }, (_) => true); }