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); 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 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 } }