Sic.Framework-Nanjing-Baishi/MECF.Framework.UI.Client/CenterViews/Alarms/Alarm/AlarmViewModel.cs

78 lines
2.6 KiB
C#

using System.Collections.Generic;
using System.Windows.Media;
using Aitex.Core.RT.Event;
using Aitex.Core.UI.View.Common;
using Aitex.Core.Utilities;
using MECF.Framework.UI.Client.ClientBase;
namespace MECF.Framework.UI.Client.CenterViews.Alarms.Alarm
{
public class AlarmViewModel : UiViewModelBase
{
[IgnorePropertyChange]
public List<AlarmItem> AlarmEvents { get; set; }
public AlarmViewModel()
{
Subscribe("System.LiveAlarmEvent");
}
protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
{
if (data.TryGetValue("System.LiveAlarmEvent", out var value))
UpdateAlarmEvent((List<EventItem>)value);
}
public void UpdateAlarmEvent(List<EventItem> alarmsFromRt)
{
var alarmEvents = new List<AlarmItem>();
foreach (var item in alarmsFromRt)
{
var alarmItem = new AlarmItem()
{
Type = item.Level == EventLevel.Alarm ? "Alarm" : (item.Level == EventLevel.Information ? "Info" : "Warning"),
Source = item.Source,
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: alarmItem.TextColor = Brushes.Red; break;
case EventLevel.Warning: alarmItem.TextColor = Brushes.Yellow; break;
default: alarmItem.TextColor = Brushes.White; break;
}
alarmEvents.Add(alarmItem);
}
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(nameof(AlarmEvents));
}
}
}