using MECF.Framework.Common.DataCenter; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using Venus_Core; namespace Venus_MainPages.ViewModels { internal class SignalTowerConfigViewModel : BindableBase { #region 私有字段 private ObservableCollection m_SignalTowerData = new ObservableCollection(); private XmlDocument _xmlSignalTower; #endregion #region 属性 public ObservableCollection SignalTowerData { get { return m_SignalTowerData; } set { SetProperty(ref m_SignalTowerData, value); } } #endregion #region 命令 private DelegateCommand _SignalTowerDataCommand; public DelegateCommand SignalTowerDataCommand => _SignalTowerDataCommand ?? (_SignalTowerDataCommand = new DelegateCommand(OnSignalTowerData)); #endregion #region 构造函数 public SignalTowerConfigViewModel() { _xmlSignalTower=new XmlDocument(); string contentSignal = QueryDataClient.Instance.Service.GetTypedConfigContent("SignalTower", ""); _xmlSignalTower.LoadXml(contentSignal); string content = QueryDataClient.Instance.Service.GetTypedConfigContent("DataGroup", ""); XmlDocument xmlContent = new XmlDocument(); xmlContent.LoadXml(content); var groups = xmlContent.SelectNodes($"DataGroupConfig/DataGroup[@name='SignalTower']/DataItem"); List names = new List(); foreach (var item in groups) { XmlElement element = item as XmlElement; string name = element.GetAttribute("name"); names.Add(name); if (SignalTowerData.FirstOrDefault(x => x.Name == name) == null) { SignalTowerData.Add(new SignalTowerItem() { Name = name, }); } } } #endregion #region 命令方法 private void OnSignalTowerData() { var nodeGroup = _xmlSignalTower.SelectSingleNode($"STEvents"); var nodeItem = _xmlSignalTower.SelectNodes($"STEvents/STEvent"); foreach (var nodeGroupChildNode in nodeItem) { var node = nodeGroupChildNode as XmlElement; nodeGroup.RemoveChild(node); } foreach (var item in SignalTowerData) { var node = _xmlSignalTower.CreateElement("STEvent"); node.SetAttribute("name", item.Name); node.SetAttribute("Red", item.IsRed ? "on" : item.IsRedBlinking ? "blinking" : "off"); node.SetAttribute("Yellow", item.IsYellow ? "on" : item.IsYellowBlinking ? "blinking" : "off"); node.SetAttribute("Blue", item.IsBlue ? "on" : item.IsBlueBlinking ? "blinking" : "off"); node.SetAttribute("Green", item.IsGreen ? "on" : item.IsGreenBlinking ? "blinking" : "off"); node.SetAttribute("Buzzer", item.IsBuzzer ? "on" : item.IsBuzzerBlinking ? "blinking" : "off"); nodeGroup.AppendChild(node); } QueryDataClient.Instance.Service.SetTypedConfigContent("SignalTower", "", _xmlSignalTower.InnerXml); } #endregion } }