using GalaSoft.MvvmLight.Command; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using FLY.Blowing.DbViewer.Core; using System.Collections.Generic; using System.Windows.Navigation; namespace FLY.Blowing.DbViewer { /// <summary> /// PageSelect.xaml 的交互逻辑 /// </summary> public partial class PageSelect : Page { PageSelectVm viewModel; DbViewerModel dBViewerModel; public PageSelect() { InitializeComponent(); } [Unity.InjectionMethod] public void Init(DbViewerModel dBViewerModel) { this.dBViewerModel = dBViewerModel; viewModel = new PageSelectVm(); viewModel.Init(dBViewerModel); this.DataContext = viewModel; viewModel.SearchSuccessEvent += ViewModel_SearchSuccessEvent; } private void ViewModel_SearchSuccessEvent(object sender, EventArgs e) { this.NavigationService.GoBack(); this.NavigationService.RemoveBackEntry(); } private void ButtonBack_Click(object sender, RoutedEventArgs e) { this.NavigationService.GoBack(); this.NavigationService.RemoveBackEntry(); } } public class PageSelectVm : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public DateTime BeginDate { get; set; } public DateTime EndDate { get; set; } public RelayCommand ButtonSearchCmd { get; private set; } public DbHelper DbHelper { get; private set; } DbViewerModel dBViewerModel; public event EventHandler SearchSuccessEvent; public PageSelectVm() { ButtonSearchCmd = new RelayCommand(Search); } public void Init(DbViewerModel dBViewerModel) { this.dBViewerModel = dBViewerModel; DbHelper = dBViewerModel.mDbHelper; BeginDate = DateTime.Now.AddDays(-1); EndDate = DateTime.Now; } ProgressDialogController controller; async void Search() { controller = await App.MetroWindow.ShowProgressAsync("请等待...", "开始搜索", settings: new MetroDialogSettings() { NegativeButtonText = "停止", AnimateShow = false, AnimateHide = false, }); //controller.SetCancelable(true); controller.SetIndeterminate(); DbHelper.PropertyChanged += DbHelper_PropertyChanged; await Task.Run(() => { dBViewerModel.Pack = DbHelper.GetPack(BeginDate, EndDate); }); DbHelper.PropertyChanged -= DbHelper_PropertyChanged; await controller.CloseAsync(); controller = null; List<string> msgs = dBViewerModel.Pack.GetMsgs(); dBViewerModel.Pack.GetDateRange(out DateTime beginTime, out DateTime endTime); if (msgs.Count() == 0) { await App.MetroWindow.ShowMessageAsync("搜索失败", "不能获取任何数据"); dBViewerModel.IsPackReady = false; } else { dBViewerModel.IsPackReady = true; dBViewerModel.PackBeginDate = beginTime; dBViewerModel.PackEndDate = endTime; dBViewerModel.PackMsgs.Clear(); string msg = ""; for (int i = 0; i < msgs.Count(); i++) { if (!string.IsNullOrEmpty(msg)) { msg += "; "; } msg += msgs[i]; dBViewerModel.PackMsgs.Add(msgs[i]); } await App.MetroWindow.ShowMessageAsync("搜索成功", msg); if (msgs.Count() > 0) { SearchSuccessEvent?.Invoke(this, null); } } return; } private void DbHelper_PropertyChanged(object sender, PropertyChangedEventArgs e) { var dbHelper = sender as DbHelper; if (e.PropertyName == nameof(DbHelper.GetPackMsg)) { controller.SetMessage(dbHelper.GetPackMsg); } } } public class PageSelectVmUt : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public DbHelper DbHelper { get; set; } = new DbHelper(); public PageSelectVmUt() { StartTime = DateTime.Now.AddDays(-1); EndTime = DateTime.Now; } } }