using NEIntelligentControl2.Service.AGC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace NEIntelligentControl2.Views.AGC
{
///
/// 所有AGC关键信息卡片
///
public partial class AllAGCInfoCard : UserControl
{
// -----------事件-------------
public static readonly RoutedEvent SelectionChangedEvent = EventManager.RegisterRoutedEvent("SelectionChanged", RoutingStrategy.Bubble, typeof(EventHandler), typeof(DynamicAGCCard));
public event RoutedEventHandler SelectionChanged { add { AddHandler(SelectionChangedEvent, value); } remove { RemoveHandler(SelectionChangedEvent, value); } }
private Dictionary _SAGCCardPairt;// 简单AGC卡片集合
private AGCManager _AGCManager;
private bool _IsActive;
public AllAGCInfoCard()
{
InitializeComponent();
_AGCManager = App.ServiceProvider.GetService(typeof(AGCManager)) as AGCManager;
_SAGCCardPairt = new Dictionary();
Init();
}
private void Init()
{
var vs = _AGCManager.AGCInfos;
int index = 0;
foreach (var v in vs)
{
if (_SAGCCardPairt.ContainsKey(v.Title)) continue;
var card = new SimpleAGCCard(v);
card.Tag = index++;
card.MouseUp += Card_MouseUp;
_SAGCCardPairt.Add(v.Title, card);
_UGMain.Children.Add(card);
}
}
///
/// 刷新数据
///
internal async void RefreshData()
{
while (_IsActive)
{
try
{
Dispatcher.Invoke(() =>
{
foreach (var v in _SAGCCardPairt)
{
v.Value.PowerActual = v.Value.AGCInfo.AiPoints.Where(p => p.Type == Models.AGC.TagType.ActualPower).FirstOrDefault()?.Value.ToString("f2");
v.Value.PowerSet = v.Value.AGCInfo.AiPoints.Where(p => p.Type == Models.AGC.TagType.PowerSet).FirstOrDefault()?.Value.ToString("f2");
}
});
}
catch { }
await Task.Delay(2000);
}
}
private void Card_MouseUp(object sender, MouseButtonEventArgs e)
{
RaiseEvent(new RoutedEventArgs(SelectionChangedEvent, sender));
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
_IsActive = true;
Task.Run(RefreshData);
}
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
_IsActive = false;
}
}
}