using System.Windows; using System.Windows.Input; using GlobalHotKey; using SparkClient.Model.Attributes; using SparkClient.Model.Helper; using SparkClient.Model.Services; using SparkClient.ViewModel.Grading; namespace SparkClient.ViewModel.BaseWindow; public class BaseControlVM : BaseViewModel { string _windowTitle; private Visibility _showFunctionButton; private Visibility _showCloseButton; private string _functionButtonIcon; private Object _viewContent; public string WindowTitle { get { return _windowTitle; } set { _windowTitle = value; OnPropertyChanged("WindowTitle"); } } public Visibility ShowFunctionButton { get { return _showFunctionButton; } set { _showFunctionButton = value; OnPropertyChanged("ShowFunctionButton"); } } public Visibility ShowCloseButton { get { return _showCloseButton; } set { _showCloseButton = value; OnPropertyChanged("ShowCloseButton"); } } public string FunctionButtonIcon { get { return _functionButtonIcon; } set { _functionButtonIcon = value; OnPropertyChanged("FunctionButtonIcon"); } } public Object ViewControl { get { return _viewContent; } set { _viewContent = value; OnPropertyChanged("ViewControl"); } } public object Content { get; } public ICommand CloseCommand { get; } public ICommand EscCloseCommand { get; } public ICommand NextCommand { get; } /// /// 构造:创建一个带有子页面的模板,并指定子窗口标题,并指定右侧按钮事件内容 /// /// 子页面 /// 子窗口标题 /// 事件内哦那个 public BaseControlVM(BaseViewModel vm, string windowTitle, ICommand Function) { Content = vm; WindowTitle = windowTitle; CloseCommand = new RelayCommand(CloseVM); EscCloseCommand = new RelayCommand(OnClose); NextCommand = new RelayCommand(NextDiamond); } /// /// 构造:创建一个带有子页面的模板,并指定子窗口标题 /// /// 子页面 /// 子窗口标题 public BaseControlVM(BaseViewModel vm, string windowTitle) { Content = vm; WindowTitle = windowTitle; ShowCloseButton = Visibility.Visible; CloseCommand = new RelayCommand(CloseVM); NextCommand = new RelayCommand(NextDiamond); ShowFunctionButton = Visibility.Hidden; if (vm.GetType().Equals(typeof(GradingResultVM))) { // Application.Current.Dispatcher.Invoke(() => // { // try // { // if (_hkmQuickAnewDetect == null) // { // _hkmQuickAnewDetect = new HotKeyManager(); // _hkmQuickAnewDetect.Register(_hkQuickAnewDetect); // _hkmQuickAnewDetect.KeyPressed += OnHotKeyPressed; // } // // if (_hkmCloseResult == null) // { // _hkmCloseResult = new HotKeyManager(); // _hkmCloseResult.Register(_hkCloseResult); // _hkmCloseResult.KeyPressed += OnHotKeyPressedClose; // } // // } // catch (Exception ex) // { // Logger.Info($"快捷键注册失败,静默处理:{ex.Message}"); // } // }); ClientHotKeyManager.Instance.Register(ClientHotKeys.QuickAnewDetectHotKey, OnHotKeyPressed, this); ClientHotKeyManager.Instance.Register(ClientHotKeys.CloseResultHotKey, OnHotKeyPressedClose, this); } else if(vm.GetType().Equals(typeof(GradingLoadingVM))) { ShowCloseButton = Visibility.Hidden; } } /// /// 构造:创建一个带有子页面的模板 /// /// public BaseControlVM(BaseViewModel vm) { Content = vm; CloseCommand = new RelayCommand(CloseVM); } private void OnClose(object parameter) { if (parameter is KeyEventArgs keyEventArgs && keyEventArgs.Key == Key.Escape) { CloseVM(parameter); } } private void OnHotKeyPressed(object sender, KeyPressedEventArgs e) { // if(Content.GetType().Equals(typeof(GradingResultVM))) // if (WindowManager.mainViewModel.Content is BaseControlVM baseVM) { if(baseVM.Content.GetType().Equals(typeof(GradingResultVM))) NextDiamond(""); } } private void OnHotKeyPressedClose(object sender, KeyPressedEventArgs e) { // if(WindowTitle.StartsWith(MultilingualHelper.getString("DetectionResult"))) if (WindowManager.mainViewModel.Content is BaseControlVM baseVM) { if(baseVM.Content.GetType().Equals(typeof(GradingResultVM))) CloseVM(""); } } public void NextDiamond(object parameter) { CloseVM(parameter); DiamondSelectVM selectVm = new DiamondSelectVM(); ViewControl = selectVm; WindowTitle = MultilingualHelper.getString("DiamondSelect"); selectVm.StartGrading(Common.LastParam); } /// /// 关闭并退回至上一个页面 /// /// [Log] public async void CloseVM(object parameter) { if(Content is GradingResultVM resultVM) { WindowManager.PreviousVM(); WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); await SOCClientService.Service.OpenPump(false); if(resultVM._isSaveCsv == false) resultVM.SaveToCsv(); try { ClientHotKeyManager.Instance.Unregister(ClientHotKeys.QuickAnewDetectHotKey); ClientHotKeyManager.Instance.Unregister(ClientHotKeys.CloseResultHotKey); ClientHotKeyManager.Instance.Unregister(ClientHotKeys.SwitchPagesHotKey); ClientHotKeyManager.Instance.Unregister(ClientHotKeys.ArrowAndHeartHotKey); } catch (Exception ex) { Logger.Info($"快捷键释放失败,静默处理:{ex.Message}"); } //bool isSaved = (Content as GradingResultVM).isSaved; // if (isSaved) // { // // } // else { // // 部署改造:2 // WindowManager.PreviousVM(); // WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); // var _socClientService = new SOCClientService(); // _socClientService.OpenPump(false); // // MessageBox message = new MessageBox(); // // MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm")); // // if (MessageBoxResult.OK.Equals(result)) // // { // // WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); // // } // } } else { WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); } } }