private void RemoveOpenedItem(int tag, bool ifParent) { bool search = false; if (ifParent) { foreach (var v in OpenedItems) { if (v.Tag == tag) { foreach (var t in v.Items) { RemoveTabEvent?.Invoke(t.Tag); search = true; } OpenedItems.Remove(v); break; } } } else { foreach (var v in OpenedItems) { foreach (var t in v.Items) { if (t.Tag == tag) { RemoveTabEvent?.Invoke(t.Tag); v.Items.Remove(t); search = true; break; } } if (v.Items.Count == 0) { OpenedItems.Remove(v); break; } if (search) { break; } } } }
public FileManagementViewModel() { _fileHelper = new StdFileHelper(); FileInfos = new ObservableCollection <FileInfo>(); OpenedItems = new ObservableCollection <OpenedFile>(); _fileHelper.UpdateFileInfo += UpdateFileInfo; _fileHelper.AddFileEvent += AddFileEvent; SelectedSummary = ""; SelectedOpenedItem = string.Empty; SelectedItemChangedCommand = new DelegateCommand <DevExpress.Xpf.Grid.SelectedItemChangedEventArgs> ((e) => { if (!(e.NewItem is LoadedInfoBasic)) { return; } LoadedInfoBasic s = e.NewItem as LoadedInfoBasic; if (!s.FileStatus) { return; } SelectedSummary = _fileHelper.GetBriefSummary(s.FilePath.GetHashCode(), s.Site); }); ChangeDisplayCommand = new DelegateCommand <DevExpress.Xpf.Grid.SelectedItemChangedEventArgs>((e) => { if (!(e.NewItem is OpenedInfoBasic)) { return; } var s = e.NewItem as OpenedInfoBasic; ChangeViewTabEvent?.Invoke(s.Tag); }); DoubleClickCommand = new DelegateCommand <object>((e) => { if (!(e is LoadedInfoBasic)) { return; } var s = e as LoadedInfoBasic; if (!s.FileStatus) { return; } int hash = s.FilePath.GetHashCode(); int tag = hash ^ System.DateTime.UtcNow.Ticks.GetHashCode(); AddOpenedItem(hash, $"[RAW] SITE:{s.Site.ToString()} {s.FileName}", tag); var id = _fileHelper.CreateFilterDataHandler(hash, s.Site); OpenDetailEvent?.Invoke(_fileHelper.GetFile(hash), id, tag); }); CloseCommand = new DelegateCommand <object>((e) => { var s = e as OpenedInfoBasic; bool b = s.GetType().Name == "OpenedFile"; RemoveOpenedItem(s.Tag, b); }); FileCloseCommand = new DelegateCommand <RoutedEventArgs>((e) => { var path = (((FileInfo)((Button)e.Source).DataContext)).FilePath; foreach (var v in OpenedItems) { if (v.FilePath == path) { foreach (var t in v.Items) { RemoveTabEvent?.Invoke(t.Tag); } OpenedItems.Remove(v); break; } } RemoveFile(path); for (int i = 0; i < FileInfos.Count; i++) { if (FileInfos[i].FilePath == path) { FileInfos.RemoveAt(i); } } GC.Collect(); }); CopySummary = new DelegateCommand(() => { Clipboard.SetDataObject(SelectedSummary); }); }