using NEIntelligentControl2.Models.Windturbine;
using NEIntelligentControl2.Models.WinForms;
using NEIntelligentControl2.Service.Windturbine;
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.Controls.Primitives;
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.Infos
{
///
/// 风机测点详情
///
public partial class WindturbineDetails : UserControl
{
private InfoManager _InfoManager;
private Dictionary _GroupBoxs;
private List _PointTags;
private IList _UniformCodeInfos;
public WindturbineInfo WindturbineInfo { get; set; }
private bool _IsActived;
private bool _IsLoaded;
public WindturbineDetails()
{
InitializeComponent();
_InfoManager = App.ServiceProvider.GetService(typeof(InfoManager)) as InfoManager;
InitGroupBox();
}
private void InitGroupBox()
{
_GroupBoxs = new Dictionary();
foreach(var v in _GdMain.Children)
{
var gd = v as Grid;
if (gd == null) continue;
foreach(var vv in gd.Children)
{
GroupBox gb = vv as GroupBox;
if(gb == null) continue;
_GroupBoxs.Add(gb.Tag as string, gb);
}
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
_IsActived = true;
InitTags();
Task.Run(RefreshData);
}
private async void RefreshData()
{
if (_UniformCodeInfos == null) return;
string[] ucs = _UniformCodeInfos.Select(u => u.UniformCode).ToArray();
while (_IsActived)
{
try
{
var vs = _InfoManager.GetPointDatas(WindturbineInfo.WindturbineId, ucs);
Dispatcher.Invoke(() =>
{
foreach(var v in _PointTags)
{
v.UpdateData(vs);
}
});
}
catch { }
await Task.Delay(2000);
}
}
private void InitTags()
{
if (_IsLoaded) return;
_PointTags = new List();
var vs = _InfoManager.GetUniformCode(WindturbineInfo.StationId, WindturbineInfo.ModelId);
if (vs == null) return;
_UniformCodeInfos = vs;
foreach (var v in vs)
{
if (!_GroupBoxs.ContainsKey(v.PartIndex)) continue;
UniformGrid ug = _GroupBoxs[v.PartIndex].Content as UniformGrid;
PointTag pt = new PointTag(v, WindturbineInfo.WindturbineId);
ug.Children.Add(pt);
_PointTags.Add(pt);
}
_IsLoaded = true;
}
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
_IsActived = false;
}
}
}