SignalTowerConfigViewModel.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using MECF.Framework.Common.DataCenter;
  2. using Prism.Commands;
  3. using Prism.Mvvm;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Xml;
  11. using Venus_Core;
  12. namespace Venus_MainPages.ViewModels
  13. {
  14. internal class SignalTowerConfigViewModel : BindableBase
  15. {
  16. #region 私有字段
  17. private ObservableCollection<SignalTowerItem> m_SignalTowerData = new ObservableCollection<SignalTowerItem>();
  18. private XmlDocument _xmlSignalTower;
  19. #endregion
  20. #region 属性
  21. public ObservableCollection<SignalTowerItem> SignalTowerData
  22. {
  23. get { return m_SignalTowerData; }
  24. set
  25. {
  26. SetProperty(ref m_SignalTowerData, value);
  27. }
  28. }
  29. #endregion
  30. #region 命令
  31. private DelegateCommand _SignalTowerDataCommand;
  32. public DelegateCommand SignalTowerDataCommand =>
  33. _SignalTowerDataCommand ?? (_SignalTowerDataCommand = new DelegateCommand(OnSignalTowerData));
  34. #endregion
  35. #region 构造函数
  36. public SignalTowerConfigViewModel()
  37. {
  38. _xmlSignalTower=new XmlDocument();
  39. string contentSignal = QueryDataClient.Instance.Service.GetTypedConfigContent("SignalTower", "");
  40. _xmlSignalTower.LoadXml(contentSignal);
  41. var items = _xmlSignalTower.SelectNodes($"STEvents/STEvent");
  42. foreach (var item in items)
  43. {
  44. XmlElement element = item as XmlElement;
  45. SignalTowerItem stItem = new SignalTowerItem();
  46. stItem.Name = element.GetAttribute("name");
  47. stItem.IsRed = string.Compare(element.GetAttribute("Red"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  48. stItem.IsRedBlinking = string.Compare(element.GetAttribute("Red"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  49. stItem.IsYellow = string.Compare(element.GetAttribute("Yellow"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  50. stItem.IsYellowBlinking = string.Compare(element.GetAttribute("Yellow"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  51. stItem.IsGreen = string.Compare(element.GetAttribute("Green"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  52. stItem.IsGreenBlinking = string.Compare(element.GetAttribute("Green"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  53. stItem.IsBlue = string.Compare(element.GetAttribute("Blue"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  54. stItem.IsBlueBlinking = string.Compare(element.GetAttribute("Blue"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  55. stItem.IsBuzzer = string.Compare(element.GetAttribute("Buzzer"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  56. stItem.IsBuzzerBlinking = string.Compare(element.GetAttribute("Buzzer"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  57. SignalTowerData.Add(stItem);
  58. }
  59. //string content = QueryDataClient.Instance.Service.GetTypedConfigContent("DataGroup", "");
  60. //XmlDocument xmlContent = new XmlDocument();
  61. //xmlContent.LoadXml(content);
  62. //var groups = xmlContent.SelectNodes($"DataGroupConfig/DataGroup[@name='SignalTower']/DataItem");
  63. //List<string> names = new List<string>();
  64. //foreach (var item in groups)
  65. //{
  66. // XmlElement element = item as XmlElement;
  67. // string name = element.GetAttribute("name");
  68. // names.Add(name);
  69. // if (SignalTowerData.FirstOrDefault(x => x.Name == name) == null)
  70. // {
  71. // SignalTowerData.Add(new SignalTowerItem() { Name = name, });
  72. // }
  73. //}
  74. }
  75. #endregion
  76. #region 命令方法
  77. private void OnSignalTowerData()
  78. {
  79. var nodeGroup = _xmlSignalTower.SelectSingleNode($"STEvents");
  80. var nodeItem = _xmlSignalTower.SelectNodes($"STEvents/STEvent");
  81. foreach (var nodeGroupChildNode in nodeItem)
  82. {
  83. var node = nodeGroupChildNode as XmlElement;
  84. nodeGroup.RemoveChild(node);
  85. }
  86. foreach (var item in SignalTowerData)
  87. {
  88. var node = _xmlSignalTower.CreateElement("STEvent");
  89. node.SetAttribute("name", item.Name);
  90. node.SetAttribute("Red", item.IsRed ? "on" : item.IsRedBlinking ? "blinking" : "off");
  91. node.SetAttribute("Yellow", item.IsYellow ? "on" : item.IsYellowBlinking ? "blinking" : "off");
  92. node.SetAttribute("Blue", item.IsBlue ? "on" : item.IsBlueBlinking ? "blinking" : "off");
  93. node.SetAttribute("Green", item.IsGreen ? "on" : item.IsGreenBlinking ? "blinking" : "off");
  94. node.SetAttribute("Buzzer", item.IsBuzzer ? "on" : item.IsBuzzerBlinking ? "blinking" : "off");
  95. nodeGroup.AppendChild(node);
  96. }
  97. QueryDataClient.Instance.Service.SetTypedConfigContent("SignalTower", "", _xmlSignalTower.InnerXml);
  98. }
  99. #endregion
  100. }
  101. }