SignalTowerConfigViewModel.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using CyberX8_Core;
  2. using MECF.Framework.Common.DataCenter;
  3. using Prism.Commands;
  4. using Prism.Mvvm;
  5. using System;
  6. using System.Collections.ObjectModel;
  7. using System.Windows.Input;
  8. using System.Xml;
  9. namespace CyberX8_MainPages.ViewModels
  10. {
  11. public class SignalTowerConfigViewModel : BindableBase
  12. {
  13. #region 内部变量
  14. /// <summary>
  15. /// SignalTowerDatas
  16. /// </summary>
  17. private ObservableCollection<SignalTowerItem> _signalTowerDatas = new ObservableCollection<SignalTowerItem>();
  18. /// <summary>
  19. /// SignalTower XML file
  20. /// </summary>
  21. private XmlDocument _xmlSignalTower;
  22. #endregion
  23. #region 属性
  24. /// <summary>
  25. /// SignalTowerDatas
  26. /// </summary>
  27. public ObservableCollection<SignalTowerItem> SignalTowerDatas
  28. {
  29. get { return _signalTowerDatas; }
  30. set
  31. {
  32. SetProperty(ref _signalTowerDatas, value);
  33. }
  34. }
  35. #endregion
  36. #region 命令
  37. /// <summary>
  38. /// Save Command
  39. /// </summary>
  40. public ICommand SaveConfigCommand { get; set; }
  41. #endregion
  42. /// <summary>
  43. /// 构造函数
  44. /// </summary>
  45. public SignalTowerConfigViewModel()
  46. {
  47. SaveConfigCommand = new DelegateCommand<object>(OnSaveConfig);
  48. _xmlSignalTower = new XmlDocument();
  49. string contentSignal = QueryDataClient.Instance.Service.GetTypedConfigContent("SignalTower", "");
  50. _xmlSignalTower.LoadXml(contentSignal);
  51. var items = _xmlSignalTower.SelectNodes($"STEvents/STEvent");
  52. foreach (var item in items)
  53. {
  54. XmlElement element = item as XmlElement;
  55. SignalTowerItem stItem = new SignalTowerItem();
  56. stItem.Name = element.GetAttribute("name");
  57. stItem.IsRed = string.Compare(element.GetAttribute("Red"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  58. stItem.IsRedBlinking = string.Compare(element.GetAttribute("Red"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  59. stItem.IsYellow = string.Compare(element.GetAttribute("Yellow"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  60. stItem.IsYellowBlinking = string.Compare(element.GetAttribute("Yellow"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  61. stItem.IsGreen = string.Compare(element.GetAttribute("Green"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  62. stItem.IsGreenBlinking = string.Compare(element.GetAttribute("Green"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  63. stItem.IsBlue = string.Compare(element.GetAttribute("Blue"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  64. stItem.IsBlueBlinking = string.Compare(element.GetAttribute("Blue"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  65. stItem.IsBuzzer = string.Compare(element.GetAttribute("Buzzer"), "on", StringComparison.CurrentCultureIgnoreCase) == 0;
  66. stItem.IsBuzzerBlinking = string.Compare(element.GetAttribute("Buzzer"), "blinking", StringComparison.CurrentCultureIgnoreCase) == 0;
  67. SignalTowerDatas.Add(stItem);
  68. }
  69. }
  70. /// <summary>
  71. /// 加载数据
  72. /// </summary>
  73. public void LoadData(string systemName)
  74. {
  75. }
  76. /// <summary>
  77. /// 隐藏
  78. /// </summary>
  79. public void Hide()
  80. {
  81. }
  82. #region 指令Action
  83. /// <summary>
  84. /// 保存设置
  85. /// </summary>
  86. /// <param name="param"></param>
  87. private void OnSaveConfig(object param)
  88. {
  89. var nodeGroup = _xmlSignalTower.SelectSingleNode($"STEvents");
  90. var nodeItem = _xmlSignalTower.SelectNodes($"STEvents/STEvent");
  91. foreach (var nodeGroupChildNode in nodeItem)
  92. {
  93. var node = nodeGroupChildNode as XmlElement;
  94. nodeGroup.RemoveChild(node);
  95. }
  96. foreach (var item in SignalTowerDatas)
  97. {
  98. var node = _xmlSignalTower.CreateElement("STEvent");
  99. node.SetAttribute("name", item.Name);
  100. node.SetAttribute("Red", item.IsRed ? "on" : item.IsRedBlinking ? "blinking" : "off");
  101. node.SetAttribute("Yellow", item.IsYellow ? "on" : item.IsYellowBlinking ? "blinking" : "off");
  102. node.SetAttribute("Blue", item.IsBlue ? "on" : item.IsBlueBlinking ? "blinking" : "off");
  103. node.SetAttribute("Green", item.IsGreen ? "on" : item.IsGreenBlinking ? "blinking" : "off");
  104. node.SetAttribute("Buzzer", item.IsBuzzer ? "on" : item.IsBuzzerBlinking ? "blinking" : "off");
  105. nodeGroup.AppendChild(node);
  106. }
  107. QueryDataClient.Instance.Service.SetTypedConfigContent("SignalTower", "", _xmlSignalTower.InnerXml);
  108. }
  109. #endregion
  110. }
  111. }