using CyberX8_Core; using MECF.Framework.Common.DataCenter; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.ObjectModel; using System.Windows.Input; using System.Xml; namespace CyberX8_MainPages.ViewModels { public class SignalTowerConfigViewModel : BindableBase { #region 内部变量 /// /// SignalTowerDatas /// private ObservableCollection _signalTowerDatas = new ObservableCollection(); /// /// SignalTower XML file /// private XmlDocument _xmlSignalTower; #endregion #region 属性 /// /// SignalTowerDatas /// public ObservableCollection SignalTowerDatas { get { return _signalTowerDatas; } set { SetProperty(ref _signalTowerDatas, value); } } #endregion #region 命令 /// /// Save Command /// public ICommand SaveConfigCommand { get; set; } #endregion /// /// 构造函数 /// public SignalTowerConfigViewModel() { SaveConfigCommand = new DelegateCommand(OnSaveConfig); _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; SignalTowerDatas.Add(stItem); } } /// /// 加载数据 /// public void LoadData(string systemName) { } /// /// 隐藏 /// public void Hide() { } #region 指令Action /// /// 保存设置 /// /// private void OnSaveConfig(object param) { 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 SignalTowerDatas) { 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 } }