AlarmViewModel.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Threading;
  6. using System.Windows;
  7. using System.Windows.Media;
  8. using System.Windows.Threading;
  9. using Aitex.Core.RT.Event;
  10. using Aitex.Core.UI.View.Common;
  11. using Aitex.Core.Util;
  12. using Aitex.Core.Utilities;
  13. using OpenSEMI.ClientBase;
  14. using OpenSEMI.ClientBase.IO;
  15. using VirgoUI.Client.Models.Sys;
  16. namespace VirgoUI.Client.Models.Operate.Alarm
  17. {
  18. class AlarmViewModel : UiViewModelBase
  19. {
  20. string AlarmEventParam = "System.AlarmEvent";
  21. [IgnorePropertyChange]
  22. public List<AlarmItem> AlarmEvents
  23. {
  24. get;
  25. set;
  26. }
  27. public AlarmViewModel()
  28. {
  29. Subscribe(AlarmEventParam);
  30. }
  31. protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
  32. {
  33. Application.Current.Dispatcher.Invoke(new Action(() =>
  34. {
  35. UpdateAlarmEvent((List<EventItem>)data[AlarmEventParam]);
  36. }));
  37. }
  38. public void UpdateAlarmEvent(List<EventItem> evItems)
  39. {
  40. if (evItems.Count <= 0) return;
  41. var evItems2 = evItems.OrderByDescending(ev => ev.OccuringTime);
  42. var alarmEvents = new List<AlarmItem>();
  43. foreach (EventItem item in evItems2)
  44. {
  45. var it = new AlarmItem()
  46. {
  47. Type = item.Level == EventLevel.Alarm ? "Alarm" : (item.Level == EventLevel.Information ? "Info" : "Warning"),
  48. OccuringTime = item.OccuringTime.ToString("HH:mm:ss"),
  49. Description = item.Description,
  50. EventEnum = item.EventEnum,
  51. EventId = item.Id,
  52. Explaination = item.Explaination,
  53. Solution = item.Solution,
  54. };
  55. switch (item.Level)
  56. {
  57. case EventLevel.Alarm: it.TextColor = Brushes.Red; break;
  58. case EventLevel.Warning: it.TextColor = Brushes.Yellow; break;
  59. default: it.TextColor = Brushes.White; break;
  60. }
  61. alarmEvents.Add(it);
  62. }
  63. if (AlarmEvents == null || (alarmEvents.Count != AlarmEvents.Count))
  64. {
  65. AlarmEvents = alarmEvents;
  66. }
  67. else
  68. {
  69. bool isEqual = true;
  70. if (alarmEvents.Count == AlarmEvents.Count)
  71. {
  72. for (int i = 0; i < alarmEvents.Count; i++)
  73. {
  74. if (!alarmEvents[i].IsEqualTo(AlarmEvents[i]))
  75. {
  76. isEqual = false;
  77. break;
  78. }
  79. }
  80. }
  81. if (!isEqual)
  82. AlarmEvents = alarmEvents;
  83. }
  84. NotifyOfPropertyChange("AlarmEvents");
  85. }
  86. }
  87. }