using LiveCharts; using Prism.Mvvm; using System.Linq; using Prism.Events; using Prism.Commands; using System.Windows.Media; using System.Threading.Tasks; using SHJX.Service.Common.Event; using SHJX.Service.Model.EventArgs; using SHJX.Service.Model.CRUDModules; using SHJX.Service.Control.Interface; using SHJX.Service.Model.MethodArgs; namespace SHJX.Service.Shell.ViewModels.Manual { public class TitrationManualWindowViewModel : BindableBase { #region Field private readonly IManualService _service; #endregion #region Properties public ChartValues SeriesCollection { get; init; } private TitrationValue _titrationDefaultValue; private CameraValue _cameraValue; public TitrationValue TitrationDefaultValue { get => _titrationDefaultValue; set => SetProperty(ref _titrationDefaultValue, value); } public CameraValue cameraValue { get => _cameraValue; set => SetProperty(ref _cameraValue, value); } private LiquidAmount _liquidAmountValue; public LiquidAmount LiquidAmountValue { get => _liquidAmountValue; set => SetProperty(ref _liquidAmountValue, value); } /// /// 连接名 /// private bool _titrationStatus; public bool TitrationStatus { get => _titrationStatus; set => SetProperty(ref _titrationStatus, value); } /// /// 端口连接状态 /// private SolidColorBrush _titrationStatusFill; public SolidColorBrush TitrationStatusFill { get => _titrationStatusFill; set { SetProperty(ref _titrationStatusFill, value); _titrationStatusFill.Freeze(); } } /// /// 端口连接状态 /// private TitrationValueArgs _titrationValue; public TitrationValueArgs TitrationValue { get => _titrationValue; set => SetProperty(ref _titrationValue, value); } /// /// 相机最大曝光值 /// private int _maxCameraRange; public int MaxCameraRange { get => _maxCameraRange; set => SetProperty(ref _maxCameraRange, value); } private bool _optionTitration; public bool OptionTitration { get => _optionTitration; set => SetProperty(ref _optionTitration, value); } #endregion public TitrationManualWindowViewModel(IEventAggregator ea, IManualService service) { _service = service; SeriesCollection = new ChartValues(); TitrationDefaultValue = _service.GetData().FirstOrDefault(); cameraValue = _service.GetData().FirstOrDefault(); LiquidAmountValue = _service.GetOnceDropLiquidAmount(); TitrationStatus = true; TitrationStatusFill = Brushes.Red; MaxCameraRange = -1; OptionTitration = false; TitrationValue = new TitrationValueArgs(); ea.GetEvent().Subscribe((lists) => { SeriesCollection.Clear(); SeriesCollection.AddRange(lists); }); ea.GetEvent().Subscribe((res) => { TitrationStatus = !res; TitrationStatusFill = res ? Brushes.LightGreen : Brushes.Red; }); ea.GetEvent().Subscribe((value) => { TitrationValue = value; }); } #region Command private DelegateCommand _manualTitrationCommand; public DelegateCommand ManualTitrationCommand => _manualTitrationCommand ??= new DelegateCommand(ExecuteManualTitrationCommand); private DelegateCommand _manualTitrationCommandStop; public DelegateCommand ManualTitrationCommandStop => _manualTitrationCommandStop ??= new DelegateCommand(ExecuteManualTitrationCommandStop); private DelegateCommand _manualExplosionCommand; public DelegateCommand ManualExplosionCommand => _manualExplosionCommand ??= new DelegateCommand(ExecuteManualExplosionCommand); private DelegateCommand _manualcheckParams; public DelegateCommand ManualcheckParams => _manualcheckParams ??= new DelegateCommand(ExecuteManualcheckParams); #endregion #region Execute private void ExecuteManualTitrationCommand() { Task.Factory.StartNew(() => { TitrationArg arg = new() { RangeValue = TitrationDefaultValue.RangeValue, BeforeWaitTime = TitrationDefaultValue.BeforeWaitTime, ArriveCheckCount = TitrationDefaultValue.ArriveCheckCount, IntervalTime = TitrationDefaultValue.IntervalTime, MaxDropVolume = TitrationDefaultValue.NormalMaxDropVolume, LiquidAmount = LiquidAmountValue.Amount, PumpCapacity = LiquidAmountValue.Capacity, LiquidConvertRatio = LiquidAmountValue.ConvertRatio, CameraRange = MaxCameraRange, WhetherQuicklyTitration = OptionTitration, QuicklyTitrationValue = TitrationDefaultValue.QuicklyTitrationValue, explosion = cameraValue }; _service.ManualExecuteTitration(arg); }); } private void ExecuteManualTitrationCommandStop() { _service.ManualExecuteTitrationStop(); } private void ExecuteManualExplosionCommand() { _service.ManualExecuteExplosion(MaxCameraRange); } private void ExecuteManualcheckParams() { _service.ManualcheckParams(); } #endregion } }