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 Titration2ManualWindowViewModel : BindableBase { #region Field private readonly IManualService _service; #endregion #region Properties public ChartValues SeriesCollection2 { get; init; } private Titration2Value _titration2DefaultValue; private Camera2Value _camera2Value; public Titration2Value Titration2DefaultValue { get => _titration2DefaultValue; set => SetProperty(ref _titration2DefaultValue, value); } public Camera2Value camera2Value { get => _camera2Value; set => SetProperty(ref _camera2Value, value); } private LiquidAmount _liquidAmountValue; public LiquidAmount LiquidAmountValue { get => _liquidAmountValue; set => SetProperty(ref _liquidAmountValue, value); } /// /// 连接名 /// private bool _titrationStatus2; public bool TitrationStatus2 { get => _titrationStatus2; set => SetProperty(ref _titrationStatus2, value); } /// /// 端口连接状态 /// private SolidColorBrush _titrationStatusFill2; public SolidColorBrush TitrationStatusFill2 { get => _titrationStatusFill2; set { SetProperty(ref _titrationStatusFill2, value); _titrationStatusFill2.Freeze(); } } /// /// 端口连接状态 /// private Titration2ValueArgs _titrationValue; public Titration2ValueArgs Titration2Value { 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 Titration2ManualWindowViewModel(IEventAggregator ea, IManualService service) { _service = service; SeriesCollection2 = new ChartValues(); Titration2DefaultValue = _service.GetData().FirstOrDefault(); camera2Value = _service.GetData().FirstOrDefault(); LiquidAmountValue = _service.GetOnceDropLiquidAmount(); TitrationStatus2 = true; TitrationStatusFill2 = Brushes.Red; MaxCameraRange = -1; OptionTitration = false; Titration2Value = new Titration2ValueArgs(); ea.GetEvent().Subscribe((lists) => { SeriesCollection2.Clear(); SeriesCollection2.AddRange(lists); }); ea.GetEvent().Subscribe((res) => { TitrationStatus2 = !res; TitrationStatusFill2 = res ? Brushes.LightGreen : Brushes.Red; }); ea.GetEvent().Subscribe((value) => { Titration2Value = 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(() => { Titration2Arg arg = new() { RangeValue = Titration2DefaultValue.RangeValue, BeforeWaitTime = Titration2DefaultValue.BeforeWaitTime, ArriveCheckCount = Titration2DefaultValue.ArriveCheckCount, IntervalTime = Titration2DefaultValue.IntervalTime, MaxDropVolume = Titration2DefaultValue.NormalMaxDropVolume, LiquidAmount = LiquidAmountValue.Amount, PumpCapacity = LiquidAmountValue.Capacity, LiquidConvertRatio = LiquidAmountValue.ConvertRatio, CameraRange = MaxCameraRange, WhetherQuicklyTitration = OptionTitration, QuicklyTitrationValue = Titration2DefaultValue.QuicklyTitrationValue, explosion=camera2Value }; _service.ManualExecuteTitration2(arg); }); } private void ExecuteManualTitrationCommandStop() { _service.ManualExecuteTitration2Stop(); } private void ExecuteManualExplosionCommand() { _service.ManualExecuteExplosion2(MaxCameraRange); } private void ExecuteManualcheckParams() { _service.ManualcheckParams2(); } #endregion } }