using Prism.Mvvm; using System.Linq; using Prism.Events; using SHJX.Service.Common.Event; using System.Collections.Generic; using SHJX.Service.Model.EventArgs; using SHJX.Service.Model.XmlModules; using SHJX.Service.Control.Interface; using System.Collections.ObjectModel; using SHJX.Service.Model.ControlModules; using SHJX.Service.Common.Interface; using SHJX.Service.Common.Constants; namespace SHJX.Service.Main.ViewModels { public class DissolveMiddlePosViewModel : BindableBase { #region Fields private readonly ILogService _log; #endregion #region Properties public ObservableCollection RingProcessBars { get; set; } #endregion public DissolveMiddlePosViewModel(ILogService log, IEventAggregator ea, ISampleService service) { _log = log; SamplePosition topPosition = service.GetSamplePosition("DissolveTopPos"); SamplePosition middleposition = service.GetSamplePosition("DissolveMiddlePos"); int startIndex = topPosition.Count + 1; RingProcessBars = new ObservableCollection(); for (int i = 0; i < middleposition.Count; i++) { RingProcessBarControl ringProcess = new() { Index = i, Name = $"{middleposition.Value}{i + startIndex}" }; RingProcessBars.Add(ringProcess); } #region 监听 ea.GetEvent().Subscribe(ChangeElement); ea.GetEvent().Subscribe(ChangeProgress); #endregion } #region Event Methods public void ChangeElement(List args) { try { foreach (ElementArgs arg in args) { RingProcessBarControl control = RingProcessBars.Where(item => item.Name.Equals(arg.Name)).FirstOrDefault(); if (control is null) { continue; } RingProcessBars[control.Index].CurrentText = !arg.Enable ? string.IsNullOrWhiteSpace(arg.Current) ? string.Empty : arg.Current.Length < 2 ? arg.Current : arg.Current[1..] : string.Empty; RingProcessBars[control.Index].CenterColor = !arg.Enable ? ColorNames.SentColor : ColorNames.MainColor; } } catch (System.Exception ex) { _log.ErrorFormat(ex.ToString()); } } public void ChangeProgress(List args) { try { foreach (HeatingChangeArgs arg in args) { RingProcessBarControl control = RingProcessBars.Where(item => item.Name.Equals(arg.Name)).FirstOrDefault(); if (control is null) { continue; } RingProcessBars[control.Index].RoundVisiable = arg.Dispaly; RingProcessBars[control.Index].CurrentCycleValue = arg.Progress; } } catch (System.Exception ex) { _log.ErrorFormat(ex.ToString()); } } #endregion } }