| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 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<SignalTowerItem> m_SignalTowerData = new ObservableCollection<SignalTowerItem>();        private XmlDocument _xmlSignalTower;        #endregion        #region 属性        public ObservableCollection<SignalTowerItem> 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);            var items = _xmlSignalTower.SelectNodes($"STEvents/STEvent");            foreach (var item in items)            {                XmlElement element = item as XmlElement;                SignalTowerItem stItem = new SignalTowerItem();                stItem.Name = element.GetAttribute("name");                stItem.IsRed = string.Compare(element.GetAttribute("Red"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsRedBlinking = string.Compare(element.GetAttribute("Red"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsYellow = string.Compare(element.GetAttribute("Yellow"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsYellowBlinking = string.Compare(element.GetAttribute("Yellow"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsGreen = string.Compare(element.GetAttribute("Green"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsGreenBlinking = string.Compare(element.GetAttribute("Green"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsBlue = string.Compare(element.GetAttribute("Blue"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsBlueBlinking = string.Compare(element.GetAttribute("Blue"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsBuzzer = string.Compare(element.GetAttribute("Buzzer"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;                stItem.IsBuzzerBlinking = string.Compare(element.GetAttribute("Buzzer"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;                SignalTowerData.Add(stItem);            }            //string content = QueryDataClient.Instance.Service.GetTypedConfigContent("DataGroup", "");            //XmlDocument xmlContent = new XmlDocument();            //xmlContent.LoadXml(content);                        //var groups = xmlContent.SelectNodes($"DataGroupConfig/DataGroup[@name='SignalTower']/DataItem");            //List<string> names = new List<string>();            //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    }}
 |