using Microsoft.Win32; using PDF_Office.EventAggregators; using PDF_Office.Helper; using PDF_Office.Model; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace PDF_Office.ViewModels { public class HomeContentViewModel : BindableBase, INavigationAware { private string fileName = "Home"; public string FileName { get { return fileName; } set { SetProperty(ref fileName, value); } } private string regionName; public string ToolRegionName { get { return regionName; } set { SetProperty(ref regionName, value); } } private Visibility isLoading = Visibility.Collapsed; public Visibility IsLoading { get { return isLoading; } set { SetProperty(ref isLoading, value); } } private MainContentViewModel mainContentViewModel; public DelegateCommand OpenFileCommand { get; set; } public DelegateCommand ShowToolCommand { get; set; } public DelegateCommand CreateBlackPDFCommand { get; set; } public DelegateCommand CreateFromOtherFile { get; set; } public DelegateCommand CreateFromHtmlCommnd { get; set; } public DelegateCommand CreateFromScanner { get; set; } public IRegionManager toolregion; public IEventAggregator eventer; public IDialogService dialog; public HomeContentViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IDialogService dialogaware) { toolregion = regionManager; eventer = eventAggregator; dialog = dialogaware; ToolRegionName = RegionNames.ToolRegionName; OpenFileCommand = new DelegateCommand(OpenFile); ShowToolCommand = new DelegateCommand(ShowToolContent); CreateBlackPDFCommand = new DelegateCommand(CreatBlankPDF); CreateFromOtherFile = new DelegateCommand(createFromOtherFile); CreateFromHtmlCommnd = new DelegateCommand(createFormHtml); CreateFromScanner = new DelegateCommand(createFromScanner); System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => { toolregion.RequestNavigate(ToolRegionName, "Guid"); })); } /// /// 显示右侧不同的工具栏页面 /// /// public void ShowToolContent(string view) { toolregion.RequestNavigate(ToolRegionName, view); } /// /// 从其他格式文件创建PDF /// private async void createFromOtherFile() { string txt = Properties.Resources.txtex; string word = Properties.Resources.wordex; string ppt = Properties.Resources.pptex; string excel = Properties.Resources.excelex; string html = Properties.Resources.htmlex; string image = Properties.Resources.imageex; string allfiles = txt + word + excel + ppt + image+html; OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true; dialog.Filter = string.Format($"Files({allfiles.Replace(";",",")}|{allfiles})|" + $"Microsoft Office Word({word})|{word}|" + $"Microsoft Office Excel({excel})|{excel}|" + $"Microsoft Office PowerPoint({ppt})|{ppt}|" + $"Txt({txt})|{txt}|" + $"Picture({image})|{image}|" + $"Html({html})|{html}"); if((bool)dialog.ShowDialog()) { var fileList = dialog.FileNames.ToList().Where(x => !App.OpenedFileList.Exists(y => y == x)).ToList(); if (fileList.Count <= 0) return; IsLoading = Visibility.Visible; //在当前页签打开第一个文件 var type = System.IO.Path.GetExtension(fileList[0]).ToLower(); if(image.Contains(type)) { //图片文件 mainContentViewModel.CreateFile(fileList[0]); } else { await mainContentViewModel.CreateFileFromOffice(fileList[0]); } for (int i = 1; i < fileList.Count(); i++) { if (!App.OpenedFileList.Contains(fileList[i])) { //需要加一定延时 不然连续添加多个文件时会出现regionname重名的情况 因为多处导航是异步导航,可能绑定还没更新 await Task.Delay(20); App.mainWindowViewModel.AddTabItem(fileList[i]); } ToolMethod.SetFileThumbImg(fileList[i]); } IsLoading = Visibility.Collapsed; } } /// /// 从网页创建PDF文件 /// private void createFormHtml() { dialog.ShowDialog(DialogNames.CreateFromHtmlDialog, async e =>{ if(e.Result== ButtonResult.OK) { IsLoading = Visibility.Visible; var model = e.Parameters.GetValue(ParameterNames.DataModel); await mainContentViewModel.CreateFileFromOffice(model.FilePath,model.PageSize,model.Margin); IsLoading = Visibility.Collapsed; } }); } /// /// 从扫描仪创建 /// private void createFromScanner() { } /// /// 打开文件 /// public async void OpenFile() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = Properties.Resources.OpenDialogFilter; openFileDialog.Multiselect = true; if ((bool)openFileDialog.ShowDialog()) { IsLoading = Visibility.Visible; await Task.Delay(3); if (openFileDialog.FileNames.Count() == 1) { if (App.OpenedFileList.Contains(openFileDialog.FileName)) { App.mainWindowViewModel.SelectItem(openFileDialog.FileName); } else { mainContentViewModel.OpenFile(openFileDialog.FileName); } ToolMethod.SetFileThumbImg(openFileDialog.FileName); } else { var fileList = openFileDialog.FileNames.ToList().Where(x => !App.OpenedFileList.Exists(y => y == x)).ToList(); if (fileList.Count <= 0) return; mainContentViewModel.OpenFile(fileList[0]); for (int i = 1; i < fileList.Count(); i++) { if (!App.OpenedFileList.Contains(fileList[i])) { //需要加一定延时 不然连续添加多个文件时会出现regionname重名的情况 因为多处导航是异步导航,可能绑定还没更新 await Task.Delay(20); App.mainWindowViewModel.AddTabItem(fileList[i]); } ToolMethod.SetFileThumbImg(fileList[i]); } } IsLoading = Visibility.Collapsed; } } /// /// 创建空白文档 /// public void CreatBlankPDF() { mainContentViewModel.CreateFile(); } #region Navigate public void OnNavigatedTo(NavigationContext navigationContext) { var mainVM = navigationContext.Parameters[ParameterNames.MainViewModel] as MainContentViewModel; if (mainVM != null) { mainContentViewModel = mainVM; } } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion } }