using System; using System.Collections.Generic; using System.Linq; 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 { public event Action<IDialogResult> RequestClose; #region VM public string Title { get; private set; } = "数字键盘"; private string _inputNumber = string.Empty; public string InputNumber { get => _inputNumber; set { _inputNumber = 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>(); public NumericKeypadDialogViewModel(IEventAggregator eventAggregator, IDialogService dialogService) { NumberSevenCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberEightCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberNineCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberFourCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberFiveCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberSixCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberOneCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberTwoCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); NumberThreeCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); DeleteNumberCommand = new DelegateCommand(delegate { if (NumberCache.Any()) { NumberCache.RemoveAt(NumberCache.Count - 1); InputNumber = string.Join("", NumberCache); } }); NumberZeroCommand = new DelegateCommand<string>(delegate(string value) { NumberCache.Add(value); InputNumber = string.Join("", NumberCache); }); DetermineCommand = new DelegateCommand(delegate { var number = !NumberCache.Any() ? 0 : Convert.ToInt32(string.Join("", NumberCache)); //管径 if (RuntimeCache.FillDataTextBox.Equals("PipeDiameterTextBox")) { if (number > 1000) { dialogService.ShowDialog("AlertMessageDialog", new DialogParameters { { "AlertType", AlertType.Error }, { "Title", "输入错误" }, { "Message", "管径超过限制" } }, delegate { } ); return; } } //管长 if (RuntimeCache.FillDataTextBox.Equals("PipeLengthTextBox")) { if (number > 1000) { dialogService.ShowDialog("AlertMessageDialog", new DialogParameters { { "AlertType", AlertType.Error }, { "Title", "输入错误" }, { "Message", "管长超过限制" } }, delegate { } ); return; } } //频率 if (RuntimeCache.FillDataTextBox.Equals("LowFrequencyTextBox") || RuntimeCache.FillDataTextBox.Equals("HighFrequencyTextBox")) { if (RuntimeCache.IsHydrophone) { if (number < 10 || number > 300) { dialogService.ShowDialog("AlertMessageDialog", new DialogParameters { { "AlertType", AlertType.Error }, { "Title", "输入错误" }, { "Message", "频段范围10 ~ 300Hz,请重新输入" } }, delegate { } ); return; } } if (number < 100 || number > 3000) { dialogService.ShowDialog("AlertMessageDialog", new DialogParameters { { "AlertType", AlertType.Error }, { "Title", "输入错误" }, { "Message", "频段范围100 ~ 3000Hz,请重新输入" } }, delegate { } ); return; } } eventAggregator.GetEvent<NumericKeypadEvent>().Publish(new NumberStruct { TextBoxName = RuntimeCache.FillDataTextBox, NumberValue = number.ToString() }); //重置数字键盘参数 NumberCache.Clear(); }); } public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { } } }