using System; using System.Collections.Generic; using System.Linq; using System.Windows; using Correlator.Events; using Correlator.Model; using Correlator.Util; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Services.Dialogs; namespace Correlator.ViewModels { public class NumericKeypadDialogViewModel : BindableBase, IDialogAware { /// <summary> /// 空实现 /// </summary> public event Action<IDialogResult> RequestClose { add { } remove { } } #region VM public string Title => "数字键盘"; private string _inputNumber = string.Empty; public string InputNumber { get => _inputNumber; set { _inputNumber = value; RaisePropertyChanged(); } } private string _workMode = string.Empty; public string WorkMode { get => _workMode; set { _workMode = value; RaisePropertyChanged(); } } #endregion #region DelegateCommand public DelegateCommand<string> NumberSevenCommand { get; } public DelegateCommand<string> NumberEightCommand { get; } public DelegateCommand<string> NumberNineCommand { get; } public DelegateCommand<string> NumberFourCommand { get; } public DelegateCommand<string> NumberFiveCommand { get; } public DelegateCommand<string> NumberSixCommand { get; } public DelegateCommand<string> NumberOneCommand { get; } public DelegateCommand<string> NumberTwoCommand { get; } public DelegateCommand<string> NumberThreeCommand { get; } public DelegateCommand DeleteNumberCommand { get; } public DelegateCommand<string> NumberZeroCommand { get; } public DelegateCommand DetermineCommand { get; } #endregion /// <summary> /// 数字键盘缓存 /// </summary> private static readonly List<string> NumberCache = new List<string>(); private readonly IEventAggregator _eventAggregator; public NumericKeypadDialogViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; NumberSevenCommand = new DelegateCommand<string>(HandleNumber); NumberEightCommand = new DelegateCommand<string>(HandleNumber); NumberNineCommand = new DelegateCommand<string>(HandleNumber); NumberFourCommand = new DelegateCommand<string>(HandleNumber); NumberFiveCommand = new DelegateCommand<string>(HandleNumber); NumberSixCommand = new DelegateCommand<string>(HandleNumber); NumberOneCommand = new DelegateCommand<string>(HandleNumber); NumberTwoCommand = new DelegateCommand<string>(HandleNumber); NumberThreeCommand = new DelegateCommand<string>(HandleNumber); DeleteNumberCommand = new DelegateCommand(DeleteNumber); NumberZeroCommand = new DelegateCommand<string>(HandleNumber); DetermineCommand = new DelegateCommand(Determine); } private void HandleNumber(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); } private void DeleteNumber() { if (NumberCache.Any()) { NumberCache.RemoveAt(NumberCache.Count - 1); InputNumber = string.Join("", NumberCache); } } private void Determine() { var number = !NumberCache.Any() ? 0 : Convert.ToInt32(string.Join("", NumberCache)); //管径 if (RuntimeCache.FillDataTextBox.Equals("PipeDiameterTextBox")) { if (number > 1000) { MessageBox.Show("管径超过限制,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Stop); return; } } //管长 if (RuntimeCache.FillDataTextBox.Equals("PipeLengthTextBox")) { if (number > 1000) { MessageBox.Show("管长超过限制,请重新输入", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Stop); return; } } _eventAggregator.GetEvent<NumericKeypadEvent>().Publish(new NumberStruct { TextBoxName = RuntimeCache.FillDataTextBox, NumberValue = number.ToString() }); //重置数字键盘参数 NumberCache.Clear(); InputNumber = string.Join("", NumberCache); } public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { WorkMode = RuntimeCache.IsHydrophone ? "水听器模式" : "加速度计模式"; } } }