using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MECF.Framework.Common.OperationCenter; using Prism.Commands; using Prism.Mvvm; using Venus_MainPages.Unity; //using Venus_MainPages.Unity.SystemConfig; namespace Venus_MainPages.ViewModels { public class SystemConfigViewModel:BindableBase { #region 私有字段 private List _ConfigNodes = new List(); private List _configItems = null; string _CurrentNodeName = string.Empty; #endregion #region 属性 public List ConfigNodes { get { return _ConfigNodes; } set { _ConfigNodes = value; RaisePropertyChanged("ConfigNodes"); } } public List ConfigItems { get { return _configItems; } set { _configItems = value; RaisePropertyChanged("ConfigItems"); } } #region 命令 private DelegateCommand _TreeViewSelectedItemChangedCmd; public DelegateCommand TreeViewSelectedItemChangedCmd => _TreeViewSelectedItemChangedCmd ?? (_TreeViewSelectedItemChangedCmd = new DelegateCommand(TreeViewSelectedItemChanged)); #endregion #endregion #region 命令 private DelegateCommand _SetValueCommand; public DelegateCommand SetValueCommand => _SetValueCommand ?? (_SetValueCommand = new DelegateCommand(SetValue)); #endregion public SystemConfigViewModel() { ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; } //protected override void OnInitialize() //{ // base.OnInitialize(); // ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; //} private void TreeViewSelectedItemChanged(object node) { var node2 = (ConfigNode)node; _CurrentNodeName = string.IsNullOrEmpty(node2.Path) ? node2.Name : $"{node2.Path}.{node2.Name}"; ConfigItems = node2.Items; GetDataOfConfigItems(); } private void GetDataOfConfigItems() { if (ConfigItems == null) return; for (int i = 0; i < ConfigItems.Count; i++) { string key = String.Format("{0}{1}{2}", _CurrentNodeName, ".", ConfigItems[i].Name); ConfigItems[i].CurrentValue = SystemConfigProvider.Instance.GetValueByName(key); if (ConfigItems[i].Type == DataType.Bool) { bool value; if (bool.TryParse(ConfigItems[i].CurrentValue, out value)) ConfigItems[i].BoolValue = value; } else ConfigItems[i].StringValue = ConfigItems[i].CurrentValue; } } private void SetValue(Object myitem) { //key :System.IsSimulatorMode //value: true or false 都是字符串 //input check var item = (ConfigItem)myitem; string value; if (item.Type == DataType.Bool) { value = item.BoolValue.ToString().ToLower(); } else { if (item.TextSaved) return; if (item.Type == DataType.Int) { int iValue; if (int.TryParse(item.StringValue, out iValue)) { if (!double.IsNaN(item.Max) && !double.IsNaN(item.Min)) { if (iValue > item.Max || iValue < item.Min) { //DialogBox.ShowWarning(string.Format("The value should be between {0} and {1}.", ((int)item.Min).ToString(), ((int)item.Max).ToString())); return; } } } else { //DialogBox.ShowWarning("Please input valid data."); return; } value = item.StringValue; } else if (item.Type == DataType.Double) { double fValue; if (double.TryParse(item.StringValue, out fValue)) { if (!double.IsNaN(item.Max) && !double.IsNaN(item.Min)) { if (fValue > item.Max || fValue < item.Min) { //DialogBox.ShowWarning(string.Format("The value should be between {0} and {1}.", item.Min.ToString(), item.Max.ToString())); return; } } } else { //DialogBox.ShowWarning("Please input valid data."); return; } value = item.StringValue; } else value = item.StringValue; } string key = String.Format("{0}{1}{2}", _CurrentNodeName, ".", item.Name); InvokeClient.Instance.Service.DoOperation("System.SetConfig", key, value); item.TextSaved = true; Reload(); } public void Reload() { GetDataOfConfigItems(); } public void SaveAll() { if (ConfigItems == null) return; ConfigItems.ForEach(item => SetValue(item)); } } }