using Microsoft.Win32; using PDF_Office.CustomControl.SystemControl; using PDF_Office.Model; using PDF_Office.EventAggregators; using PDF_Office.Views; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using ComPDFKitViewer.PdfViewer; using Dragablz; using System.Windows; using Prism.Ioc; using PDF_Office.CustomControl; namespace PDF_Office.ViewModels { public class MainWindowViewModel : BindableBase { private MainContent selectedItem; public MainContent SelectedItem { get { return selectedItem; } set { SetProperty(ref selectedItem, value); if (SelectedItem!=null) { var pdfviewer = (SelectedItem.DataContext as MainContentViewModel).PDFViewer; if(pdfviewer!=null) { CurrentPDFViewer = pdfviewer; } else { CurrentPDFViewer = null; } } } } private string progresstitle; /// /// 进度控件标题 /// public string ProgressTitle { get { return progresstitle; } set { SetProperty(ref progresstitle, value); } } private double processvalue = 0; /// /// 进度条当前值 /// public double Value { get { return processvalue; } set { SetProperty(ref processvalue, value); } } private double maxValue = 100; /// /// 进度条最大值 /// public double MaxValue { get { return maxValue; } set { SetProperty(ref maxValue, value); } } private Visibility isProcessVisible = Visibility.Collapsed; /// /// OCR进度条是否显示 /// public Visibility IsProcessVisible { get { return isProcessVisible; } set { SetProperty(ref isProcessVisible, value); } } /// /// 进度条关闭的事件 /// public Action ProcessCloseAction; private bool isCloseAllEnable = false; public bool IsCloseAllEnable { get { return isCloseAllEnable; } set { SetProperty(ref isCloseAllEnable, value); } } public DelegateCommand CloseAllTabCommand { get; set; } private CPDFViewer pdfViewer; /// /// 当前页签的PdfViewer对象 /// public CPDFViewer CurrentPDFViewer { get { return pdfViewer; } set { pdfViewer = value; } } public DelegateCommand AddTab { get; set; } /// /// 关闭OCR进度条 /// public DelegateCommand CloseOCRCommand { get; set; } public IRegionManager region; public IEventAggregator eventer; private IContainerProvider containerProvider; public IInterTabClient InterTabClient { get; } public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IContainerProvider container) { if (App.mainWindowViewModel == null) { //加载第一个窗体时 先赋值静态对象 App.mainWindowViewModel = this; } region = regionManager; eventer = eventAggregator; containerProvider = container; InterTabClient = new InterTabClient(container); AddTab = new DelegateCommand(AddTabItem); CloseOCRCommand = new DelegateCommand(closeocr); CloseAllTabCommand = new DelegateCommand(()=> { closeAllTabItem(); }); //第一次打开时需要自动加载Home页 if (App.IsFirstOpen) { System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { region.RequestNavigate(RegionNames.MainRegion, "MainContent"); } )); App.IsFirstOpen = false; } } /// /// 关闭OCR /// private void closeocr() { if(ProcessCloseAction!=null) { ProcessCloseAction.Invoke(); } } /// /// 单击+号时添加页签 /// private void AddTabItem() { region.RequestNavigate(RegionNames.MainRegion, "MainContent"); CheckViewsCount(); } /// /// 选择多文档打开时 /// /// public void AddTabItem(string filePath) { NavigationParameters parameters = new NavigationParameters { { ParameterNames.FilePath, filePath } }; region.RequestNavigate(RegionNames.MainRegion, "MainContent", parameters); CheckViewsCount(); } /// /// 关闭所有页签 /// public bool closeAllTabItem() { while (region.Regions[RegionNames.MainRegion].Views.Count() > 0) { if (CurrentPDFViewer!=null&&CurrentPDFViewer.UndoManager.CanSave) { ContentResult result = ShowSaveDialog((SelectedItem.DataContext as MainContentViewModel).viewContentViewModel); if (result == ContentResult.Cancel) return false; App.OpenedFileList.Remove(CurrentPDFViewer.Document.FilePath); CurrentPDFViewer.CloseDocument(); } if (selectedItem != null) { region.Regions[RegionNames.MainRegion].Remove(selectedItem); } //多窗体情况下,单个窗体的所有页签均已关闭时,返回true,允许关闭窗体 if(selectedItem==null) { return true; } } return true; } public void CloseTabItem(object item) { //获取x号所在的maincontentviewmodel对象 var maincontentViewModel = (item as MainContent).DataContext as MainContentViewModel; //如果已经有打开文档,先切换到目标页签 if (maincontentViewModel.PDFViewer != null) { SelectItem(maincontentViewModel.PDFViewer.Document.FilePath); } if (maincontentViewModel.PDFViewer != null &&maincontentViewModel.PDFViewer.UndoManager.CanSave) { ContentResult result = ShowSaveDialog(maincontentViewModel.viewContentViewModel); if (result == ContentResult.Cancel) { return; } App.OpenedFileList.Remove(maincontentViewModel.PDFViewer.Document.FilePath); if (maincontentViewModel.PDFViewer.Document != null) { maincontentViewModel.PDFViewer.CloseDocument(); } } if (region.Regions[RegionNames.MainRegion].Views.Count() > 1) { region.Regions[RegionNames.MainRegion].Remove(item); CheckViewsCount(); } else { if (maincontentViewModel.PDFViewer != null) { //如果是打开文档的页签 则回到首页 region.Regions[RegionNames.MainRegion].Remove(item); region.RequestNavigate(RegionNames.MainRegion, "MainContent"); } else { //如果是关闭首页则关闭软件 region.Regions[RegionNames.MainRegion].Remove(item); App.Current.MainWindow.Close(); } } return; } /// /// 检查页签个数 更新close allcommand 命令状态 /// private void CheckViewsCount() { if(region.Regions[RegionNames.MainRegion].Views.Count()>1) { IsCloseAllEnable = true; } else { IsCloseAllEnable = false; } } public void SelectItem(string filepath) { var item = region.Regions[RegionNames.MainRegion].Views.Where(t => ((t as MainContent).DataContext as MainContentViewModel).FilePath == filepath).FirstOrDefault() as MainContent; if (item == null) return; region.Regions[RegionNames.MainRegion].Activate(item); var behavior = region.Regions[RegionNames.MainRegion].Behaviors[DragablzWindowBehavior.BehaviorKey] as DragablzWindowBehavior; if(behavior!=null) { behavior.ActivateView(item); } } /// /// 显示关闭询问弹窗 /// /// /// private ContentResult ShowSaveDialog(ViewContentViewModel viewContentViewModel) { AlertsMessage alertsMessage = new AlertsMessage(); alertsMessage.ShowDialog("关闭提示","当前文档有为保存的操作,是否需要保存?","Cancel","No","Ok"); var result = alertsMessage.result; if (result == ContentResult.Ok) { var isSave = viewContentViewModel.saveFile(); if (isSave == false) result = ContentResult.Cancel; } return result; } } }