123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- using Aitex.Core.Common.DeviceData;
- using Aitex.Core.Util;
- using Caliburn.Micro;
- using Caliburn.Micro.Core;
- using FurnaceUI.Controls.Common;
- using FurnaceUI.Models;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Input;
- using System.Windows.Interactivity;
- namespace FurnaceUI.Views.Parameter
- {
- public class AUXIndexViewModel : FurnaceUIViewModelBase
- {
- private const string AUX_PATH = "PM1.RecipeEditParameter.AUX";
- private const string TABLE = "Table";
- #region 构造函数
- /// <summary>
- /// 构造函数
- /// </summary>
- public AUXIndexViewModel()
- {
- }
- #endregion
- #region 模型字段
- #region 属性 IsFirstCheck
- public bool IsFirstCheck
- {
- get { return _isFirstCheck; }
- set
- {
- _isFirstCheck = value;
- this.NotifyOfPropertyChange(nameof(IsFirstCheck));
- }
- }
- private bool _isFirstCheck = true;
- #endregion
- #region 属性 IsSelectConfig
- public bool IsSelectConfig
- {
- get { return _isSelectConfig; }
- set
- {
- _isSelectConfig = value;
- this.NotifyOfPropertyChange(nameof(IsSelectConfig));
- }
- }
- private bool _isSelectConfig = true;
- #endregion
- #region 属性 IsSelectStatus
- public bool IsSelectStatus
- {
- get { return _isSelectStatus; }
- set
- {
- _isSelectStatus = value;
- this.NotifyOfPropertyChange(nameof(IsSelectStatus));
- }
- }
- private bool _isSelectStatus = false;
- #endregion
- #region 属性 TableDataSource
- /// <summary>
- /// TableDataSource
- /// </summary>
- public List<ConfigNode> TableDataSource
- {
- get { return _tableDataSource; }
- set
- {
- _tableDataSource = value;
- this.NotifyOfPropertyChange(nameof(TableDataSource));
- }
- }
- private List<ConfigNode> _tableDataSource = new List<ConfigNode>();
- #endregion
- #region 属性 TableDataSource的显示视图
- /// <summary>
- /// TableDataSource的显示视图
- /// </summary>
- public ListCollectionView TableDataViewSource
- {
- get { return _tableDataViewSource; }
- set
- {
- _tableDataViewSource = value;
- NotifyOfPropertyChange("TableDataViewSource");
- }
- }
- private ListCollectionView _tableDataViewSource;
- #endregion
- #region 属性 AUXNode
- private ConfigNode AUXNode { get; set; }
- #endregion
- #region 属性 TableBtnNodes
- /// <summary>
- /// TableBtnNodes
- /// </summary>
- public List<ConfigNode> TableBtnNodes
- {
- get { return _tableBtnNodes; }
- set
- {
- _tableBtnNodes = value;
- this.NotifyOfPropertyChange(nameof(TableBtnNodes));
- }
- }
- private List<ConfigNode> _tableBtnNodes = new List<ConfigNode>();
- #endregion
- #region 属性 LeftTreeNodes
- /// <summary>
- /// LeftTreeNodes
- /// </summary>
- public List<ParamBase> LeftTreeNodes
- {
- get { return _leftTreeNodes; }
- set
- {
- _leftTreeNodes = value;
- this.NotifyOfPropertyChange(nameof(LeftTreeNodes));
- }
- }
- private List<ParamBase> _leftTreeNodes = new List<ParamBase>();
- #endregion
- private int _statusSelectedIndex;
- public int StatusSelectedIndex
- {
- get => _statusSelectedIndex;
- set
- {
- _statusSelectedIndex = value;
- NotifyOfPropertyChange(nameof(StatusSelectedIndex));
- }
- }
- private int _statusIndex;
- #region 订阅属性 StatusTableDataSource
- [Subscription("PM1.CurrentAuxData")]
- public List<AITAuxData> StatusTableDataSource { get; set; }
- public List<AITAuxData> ShowStatusTableDataSource { get; set; } = new List<AITAuxData>();
- #endregion
- #endregion
- #region 方法 配置和状态切换
- /// <summary>
- /// Config/Status 按钮切换
- /// </summary>
- /// <param name="obj"></param>
- public void SwitchListView(object obj)
- {
- if ("status".Equals(obj.ToString()))
- {
- IsSelectStatus = true;
- IsSelectConfig = false;
- }
- if ("setting".Equals(obj.ToString()))
- {
- IsSelectConfig = true;
- IsSelectStatus = false;
- }
- RadioButton radio = new RadioButton();
- radio.Content = "Table1";
- radio.GroupName = obj.ToString();
- TableBtnNodes.FirstOrDefault().IsSelected = true;
- SwitchTable(radio);
- }
- #endregion
- #region 方法 切换Table
- /// <summary>
- /// table切换
- /// </summary>
- /// <param name="obj"></param>
- public void SwitchTable(object obj)
- {
- var rad = obj as RadioButton;
- var tableNameStr = rad.Content.ToString();
- var groupName = rad.GroupName.ToString();
- if (groupName.ToLower().Contains("status"))
- {
- // StatusTableDataSource = AllStatusListDataSource.Where(a => a.TableName.Equals(tableNameStr)).ToList();
- }
- else
- {
- var tabNode = TableBtnNodes.Find(a => a.Name.Equals(tableNameStr));
- TableDataSource = new List<ConfigNode>(tabNode.SubNodes);
- TableDataViewSource = new ListCollectionView(TableDataSource);
- GetDataOfConfigItems();
- }
- }
- #endregion
- #region 方法 选择配置
- /// <summary>
- /// 选择配置
- /// </summary>
- /// <param name="obj"></param>
- public void SelectionChangedHandle(object obj, object selectedValue)
- {
- if (obj == null || selectedValue == null)
- {
- return;
- }
- ConfigNode node = (ConfigNode)obj;
- if (obj == null)
- {
- return;
- }
- if (selectedValue is ConfigNode selectedItem)
- {
- if (obj != selectedItem)
- {
- return;
- }
- }
- List<ConfigItem> colData = new List<ConfigItem>();
- var windowManager = IoC.Get<IWindowManager>();
- var colNum = node.Name;
- colData = TableDataSource.Where(a => a.Name.Equals(colNum)).FirstOrDefault().Items;
- AUXEditViewModel editViewModel = new AUXEditViewModel();
- editViewModel.TableNodeItems = colData;
- (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, "Edit AUX");
- GetDataOfConfigItems();
- }
- #endregion
- #region 私有方法 数据初始化
- /// <summary>
- /// 数据初始化
- /// </summary>
- private void InitData()
- {
- ConfigNode rootNode = SystemConfigProvider.Instance.GetConfig(true);
- AUXNode = FindNodeByName(rootNode, AUX_PATH);
- foreach (var item in AUXNode.SubNodes)
- {
- if (!item.Name.Contains(TABLE))
- {
- continue;
- }
- foreach (var tableItem in item.SubNodes)
- {
- var commonNode = AUXNode.SubNodes.Find(a => a.Name.Equals(tableItem.Name)).Items;
- var isInstalledItem = commonNode.OfType<ConfigItem>().Where(p => p.Name == "IsInstalled").FirstOrDefault();
- if (isInstalledItem != null)
- {
- string key = String.Format("{0}{1}{2}", isInstalledItem.Path, ".", isInstalledItem.Name);
- isInstalledItem.CurrentValue = SystemConfigProvider.Instance.GetValueByName(key);
- }
- List<ConfigItem> node = new List<ConfigItem>();
- node.AddRange(commonNode);
- node.AddRange(tableItem.Items);
- tableItem.Items = node;
- }
- }
- //按钮初始化
- TableBtnNodes = AUXNode.SubNodes.Where(a => a.Name.Contains(TABLE)).ToList();
- TableBtnNodes.FirstOrDefault().IsSelected = true;
- //表格数据初始化
- TableDataSource = new List<ConfigNode>(TableBtnNodes.FirstOrDefault().SubNodes);
- TableDataViewSource = new ListCollectionView(TableDataSource);
- GetDataOfConfigItems();
- }
- #endregion
- #region 私有方法 获取配置数据
- /// <summary>
- /// 获取配置数据
- /// </summary>
- private void GetDataOfConfigItems()
- {
- if (TableDataSource == null)
- {
- return;
- }
- new Task(() =>
- {
- Dictionary<string, ConfigItem> keyValuePairs = new Dictionary<string, ConfigItem>();
- List<string> getConfigs = new List<string>();
- foreach (var item in TableDataSource)
- {
- foreach (var tableItem in item.Items)
- {
- var key = $"{tableItem.Path}.{tableItem.Name}";
- getConfigs.Add(key);
- keyValuePairs.Add(key, tableItem);
- }
- }
- var configs = QueryDataClient.Instance.Service.PollConfig(getConfigs);
- foreach (var key in configs.Keys)
- {
- keyValuePairs[key].CurrentValue = configs[key].ToString();
- }
- }).Start();
- }
- #endregion
- #region 私有方法 根据名称获取节点
- /// <summary>
- /// 根据名称获取节点
- /// </summary>
- /// <param name="parentNode"></param>
- /// <param name="strName"></param>
- /// <returns></returns>
- private ConfigNode FindNodeByName(ConfigNode parentNode, string strName)
- {
- string strCates = strName.Split('.')[0];
- ConfigNode node = parentNode.SubNodes.Find((x) => x.Name == strCates);
- if (node == null)
- return parentNode;
- else
- return FindNodeByName(node, strName.Replace(strCates + ".", ""));
- }
- #endregion
- #region 重写方法 初始化
- /// <summary>
- /// 初始化
- /// </summary>
- protected override void OnInitialize()
- {
- base.OnInitialize();
- InitData();
- }
- #endregion
- #region 方法 切换到第一行
- /// <summary>
- /// 切换到第一行
- /// </summary>
- RelayCommand _moveCurrentToFirstCommand;
- public ICommand MoveCurrentToFirstCommand
- {
- get
- {
- if (_moveCurrentToFirstCommand == null)
- {
- _moveCurrentToFirstCommand = new RelayCommand(param => this.MoveCurrentToFirst(), param => this.CanMoveCurrentToFirst());
- }
- return _moveCurrentToFirstCommand;
- }
- }
- private bool CanMoveCurrentToFirst()
- {
- return TableDataViewSource?.CurrentPosition > 0;
- }
- private void MoveCurrentToFirst()
- {
- if (TableDataViewSource?.CurrentPosition > 0)
- {
- TableDataViewSource?.MoveCurrentToFirst();
- }
- }
- #endregion
- #region 方法 切换到上一行
- /// <summary>
- /// 切换到上一行
- /// </summary>
- RelayCommand _moveCurrentToPreviousCommand;
- public ICommand MoveCurrentToPrevioustCommand
- {
- get
- {
- if (_moveCurrentToPreviousCommand == null)
- {
- _moveCurrentToPreviousCommand = new RelayCommand(param => this.MoveCurrentToPrevious(), param => this.CanMoveCurrentToPrevious());
- }
- return _moveCurrentToPreviousCommand;
- }
- }
- private bool CanMoveCurrentToPrevious()
- {
- return TableDataViewSource?.CurrentPosition > 0;
- }
- private void MoveCurrentToPrevious()
- {
- if (TableDataViewSource?.CurrentPosition > 0)
- {
- TableDataViewSource?.MoveCurrentToPrevious();
- }
- }
- #endregion
- #region 方法 切换到下一行
- /// <summary>
- /// 切换到下一行
- /// </summary>
- RelayCommand _moveCurrentToNextCommand;
- public ICommand MoveCurrentToNextCommand
- {
- get
- {
- if (_moveCurrentToNextCommand == null)
- {
- _moveCurrentToNextCommand = new RelayCommand(param => this.MoveCurrentToNext(), param => this.CanMoveCurrentToNext());
- }
- return _moveCurrentToNextCommand;
- }
- }
- private bool CanMoveCurrentToNext()
- {
- bool isEnable = false;
- if (TableDataViewSource != null)
- {
- isEnable = TableDataViewSource?.CurrentPosition < TableDataViewSource?.Count - 1;
- }
- return isEnable;
- }
- private void MoveCurrentToNext()
- {
- if (TableDataViewSource?.CurrentPosition < TableDataViewSource?.Count - 1)
- {
- TableDataViewSource?.MoveCurrentToNext();
- }
- }
- #endregion
- #region 方法 切换到最后一行
- /// <summary>
- /// 切换到最后一行
- /// </summary>
- RelayCommand _moveCurrentToLastCommand;
- public ICommand MoveCurrentToLastCommand
- {
- get
- {
- if (_moveCurrentToLastCommand == null)
- {
- _moveCurrentToLastCommand = new RelayCommand(param => this.MoveCurrentToLast(), param => this.CanMoveCurrentToLast());
- }
- return _moveCurrentToLastCommand;
- }
- }
- private bool CanMoveCurrentToLast()
- {
- bool isEnable = false;
- if (TableDataViewSource != null)
- {
- isEnable = TableDataViewSource?.CurrentPosition < TableDataViewSource?.Count - 1;
- }
- return isEnable;
- }
- public void MoveCurrentToLast()
- {
- if (TableDataViewSource?.CurrentPosition < TableDataViewSource?.Count - 1)
- {
- TableDataViewSource?.MoveCurrentToLast();
- }
- }
- #endregion
- protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
- {
- base.InvokeAfterUpdateProperty(data);
- if (StatusTableDataSource != null) {
-
- if (ShowStatusTableDataSource == null || ShowStatusTableDataSource.Count == 0)
- {
- StatusTableDataSource.ToList().ForEach(x => ShowStatusTableDataSource.Add(x));
- }
- else
- {
- StatusTableDataSource.ToList().ForEach(x =>
- {
- var showStatus = ShowStatusTableDataSource.FirstOrDefault(s => s.Index == x.Index);
- showStatus.Feedback = x.Feedback;
- showStatus.SetPoint = x.SetPoint;
- showStatus.WarningLowLimit = x.WarningLowLimit;
- showStatus.WarningHighLimit = x.WarningHighLimit;
- showStatus.AlarmHighLimit = x.AlarmHighLimit;
- showStatus.AlarmLowLimit = x.AlarmLowLimit;
- showStatus.InvokePropertyChanged();
- });
- }
- }
- }
- protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
- {
- base.InvokeBeforeUpdateProperty(data);
- }
- }
- public class AutoScrollBehavior : Behavior<ListView>
- {
- protected override void OnAttached()
- {
- AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged;
- base.OnAttached();
- }
- protected override void OnDetaching()
- {
- AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged;
- base.OnDetaching();
- }
- private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- if (sender is ListView listView)
- {
- if (listView.SelectedItem != null)
- {
- listView.Dispatcher.BeginInvoke((System.Action)delegate
- {
- listView.UpdateLayout();
- listView.ScrollIntoView(listView.SelectedItem);//在这里使用一的方法
- });
- }
- }
- }
- }
- }
|