Newer
Older
Correlator / Correlator / ViewModels / NumericKeypadDialogViewModel.cs
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)
        {
        }
    }
}