using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using Aitex.Core.RT.Event; using Aitex.Core.UI.View.Common; using Aitex.Core.Util; using Aitex.Core.Utilities; using OpenSEMI.ClientBase; using OpenSEMI.ClientBase.IO; using VirgoUI.Client.Models.Sys; namespace VirgoUI.Client.Models.Operate.Alarm { class AlarmViewModel : UiViewModelBase { string AlarmEventParam = "System.AlarmEvent"; [IgnorePropertyChange] public List AlarmEvents { get; set; } public AlarmViewModel() { Subscribe(AlarmEventParam); } protected override void InvokeBeforeUpdateProperty(Dictionary data) { Application.Current.Dispatcher.Invoke(new Action(() => { UpdateAlarmEvent((List)data[AlarmEventParam]); })); } public void UpdateAlarmEvent(List evItems) { if (evItems.Count <= 0) return; var evItems2 = evItems.OrderByDescending(ev => ev.OccuringTime); var alarmEvents = new List(); foreach (EventItem item in evItems2) { var it = new AlarmItem() { Type = item.Level == EventLevel.Alarm ? "Alarm" : (item.Level == EventLevel.Information ? "Info" : "Warning"), OccuringTime = item.OccuringTime.ToString("HH:mm:ss"), Description = item.Description, EventEnum = item.EventEnum, EventId = item.Id, Explaination = item.Explaination, Solution = item.Solution, }; switch (item.Level) { case EventLevel.Alarm: it.TextColor = Brushes.Red; break; case EventLevel.Warning: it.TextColor = Brushes.Yellow; break; default: it.TextColor = Brushes.White; break; } alarmEvents.Add(it); } if (AlarmEvents == null || (alarmEvents.Count != AlarmEvents.Count)) { AlarmEvents = alarmEvents; } else { bool isEqual = true; if (alarmEvents.Count == AlarmEvents.Count) { for (int i = 0; i < alarmEvents.Count; i++) { if (!alarmEvents[i].IsEqualTo(AlarmEvents[i])) { isEqual = false; break; } } } if (!isEqual) AlarmEvents = alarmEvents; } NotifyOfPropertyChange("AlarmEvents"); } } }