| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 | using Aitex.Core.Common.DeviceData;using Caliburn.Micro.Core;using Caliburn.Micro;using FurnaceUI.Models;using FurnaceUI.Views.Parameter;using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;using SciChart.Core.Extensions;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Linq;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.OperationCenter;using Microsoft.DwayneNeed.Win32.User32;using Aitex.Core.Util;using MECF.Framework.UI.Client.ClientBase;using OpenSEMI.ClientBase;using System.Windows;using System.Threading;using FurnaceUI.DataModule;using System.Text.RegularExpressions;using System.Security.Policy;using System.Windows.Input;using System.Windows.Media;using System.Windows.Controls;namespace FurnaceUI.Views.Maintenances{    public class WaferRobotParameterViewModel : FurnaceUIViewModelBase, ISupportMultipleSystem    {        public bool IsManagerPermission { get => this.Permission == 3; }        private const string WaferRobotParameter_PATH = "PM1.RecipeEditParameter";        public string SystemName { get; set; }        private string _checkTypeParameter = "Speed";        private string _checkAxis = "ZAxis";        public Dictionary<string, string> SetValues { get; set; } = new Dictionary<string, string>();        public Dictionary<string, string> ConfigDict { get; set; } = new Dictionary<string, string>();        public Dictionary<string, string> ReadRobotParameterResultDict { get; set; }        [Subscription("WaferRobot.Status")]        public string WaferRobotStaus { get; set; }        private bool _isShowRobotDownBtn = false;        public bool IsShowRobotDownBtn        {            get { return _isShowRobotDownBtn; }            set { _isShowRobotDownBtn = value; this.NotifyOfPropertyChange(nameof(IsShowRobotDownBtn)); }        }        public bool IsClickButton { get; set; }        private ConfigNode _waferRobotParameterNode { get; set; }        private ConfigNode _allRootNode { get; set; }        private List<ConfigNode> _tableDataSource = new List<ConfigNode>();        public List<ConfigNode> TableDataSource        {            get { return _tableDataSource; }            set { _tableDataSource = value; this.NotifyOfPropertyChange(nameof(TableDataSource)); }        }        private List<DisplayByWaferType> _topBtnGroupDatas = new List<DisplayByWaferType>();        public List<DisplayByWaferType> TopBtnGroupDatas        {            get { return _topBtnGroupDatas; }            set { _topBtnGroupDatas = value; this.NotifyOfPropertyChange(nameof(TopBtnGroupDatas)); }        }        private Visibility _parameterTableVisibility = Visibility.Visible;        public Visibility ParameterTableVisibility        {            get { return _parameterTableVisibility; }            set { _parameterTableVisibility = value; this.NotifyOfPropertyChange(nameof(ParameterTableVisibility)); }        }        private Visibility _positionAxisTableVisibility = Visibility.Collapsed;        public Visibility PositionAxisTableVisibility        {            get { return _positionAxisTableVisibility; }            set { _positionAxisTableVisibility = value; this.NotifyOfPropertyChange(nameof(PositionAxisTableVisibility)); }        }        private Visibility _positionConfigTableVisibility = Visibility.Collapsed;        public Visibility PositionConfigTableVisibility        {            get { return _positionConfigTableVisibility; }            set { _positionConfigTableVisibility = value; this.NotifyOfPropertyChange(nameof(PositionConfigTableVisibility)); }        }        private Visibility _downloadUploadVisibility = Visibility.Collapsed;        public Visibility DownloadUploadVisibility        {            get { return _downloadUploadVisibility; }            set { _downloadUploadVisibility = value; this.NotifyOfPropertyChange(nameof(DownloadUploadVisibility)); }        }        private Visibility _axisBtnVisibility = Visibility.Collapsed;        public Visibility AxisBtnVisibility        {            get { return _axisBtnVisibility; }            set { _axisBtnVisibility = value; this.NotifyOfPropertyChange(nameof(AxisBtnVisibility)); }        }        private bool _busyIndicatorVisibility = false;        public bool BusyIndicatorVisibility        {            get { return _busyIndicatorVisibility; }            set { _busyIndicatorVisibility = value; this.NotifyOfPropertyChange(nameof(BusyIndicatorVisibility)); }        }        private bool _allBtnIsEnable = true;        public bool AllBtnIsEnable        {            get { return _allBtnIsEnable; }            set { _allBtnIsEnable = value; this.NotifyOfPropertyChange(nameof(AllBtnIsEnable)); }        }        private Visibility _slotBtnVisibility = Visibility.Collapsed;        public Visibility SlotBtnVisibility        {            get { return _slotBtnVisibility; }            set { _slotBtnVisibility = value; this.NotifyOfPropertyChange(nameof(SlotBtnVisibility)); }        }        public void SwitchListView(object obj)        {            _checkTypeParameter = obj.ToString();            TableDataSource.Clear();            _waferRobotParameterNode = FindNodeByName(_allRootNode, $"{SystemName}.{SystemName}Parameter.{_checkTypeParameter}");            _checkAxis = "";            TopBtnGroupDatas = new List<DisplayByWaferType>();            switch (_checkTypeParameter)            {                case "PositionConfig":                    PositionConfigTableVisibility = Visibility.Visible;                    PositionAxisTableVisibility = Visibility.Collapsed;                    ParameterTableVisibility = Visibility.Collapsed;                    DownloadUploadVisibility = Visibility.Visible;                    AxisBtnVisibility = Visibility.Visible;                    SlotBtnVisibility = Visibility.Visible;                    TopBtnGroupDatas = new List<DisplayByWaferType>() {                    new DisplayByWaferType(){ GroupName="PositionConfigBtn", Name="StationNumber",Value="workstationNumber",IsSelected=true},                    new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="LayerSpacing",Value="LayerSpacing",IsSelected=false},                    new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="UpperOffset",Value="UpperOffset",IsSelected=false},                    new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="DownOffset",Value="DownOffset",IsSelected=false},                    };                    _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;                    break;                case "PositionAxis":                    PositionAxisTableVisibility = Visibility.Visible;                    PositionConfigTableVisibility = Visibility.Collapsed;                    ParameterTableVisibility = Visibility.Collapsed;                    DownloadUploadVisibility = Visibility.Visible;                    AxisBtnVisibility = Visibility.Collapsed;                    SlotBtnVisibility = Visibility.Collapsed;                    break;                case "Speed":                case "Time":                    ParameterTableVisibility = Visibility.Visible;                    PositionAxisTableVisibility = Visibility.Collapsed;                    PositionConfigTableVisibility = Visibility.Collapsed;                    DownloadUploadVisibility = Visibility.Visible;                    AxisBtnVisibility = Visibility.Visible;                    SlotBtnVisibility = Visibility.Collapsed;                    TopBtnGroupDatas = new List<DisplayByWaferType>() {                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Z Axis",Value="ZAxis",IsSelected=true},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="TH Axis",Value="THAxis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX1 Axis",Value="EX1Axis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX2 Axis",Value="EX2Axis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="P Axis",Value="PAxis",IsSelected=false},                    }; _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;                    break;                case "Other":                    ParameterTableVisibility = Visibility.Visible;                    PositionAxisTableVisibility = Visibility.Collapsed;                    PositionConfigTableVisibility = Visibility.Collapsed;                    DownloadUploadVisibility = Visibility.Visible;                    AxisBtnVisibility = Visibility.Visible;                    SlotBtnVisibility = Visibility.Collapsed;                    TopBtnGroupDatas = new List<DisplayByWaferType>() {                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Z Axis",Value="ZAxis",IsSelected=true},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="TH Axis",Value="THAxis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX1 Axis",Value="EX1Axis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX2 Axis",Value="EX2Axis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="P Axis",Value="PAxis",IsSelected=false},                    new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Other",Value="Other",IsSelected=false},                    }; _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;                    break;                case "Slot":                    ParameterTableVisibility = Visibility.Visible;                    PositionAxisTableVisibility = Visibility.Collapsed;                    PositionConfigTableVisibility = Visibility.Collapsed;                    DownloadUploadVisibility = Visibility.Visible;                    AxisBtnVisibility = Visibility.Collapsed;                    SlotBtnVisibility = Visibility.Collapsed;                    break;            }            SwitchAxis(_checkAxis);        }        public void SwitchAxis(object obj)        {            _checkAxis = obj.ToString();            TableDataSource.Clear();            var data = new List<ConfigNode>();            if (!string.IsNullOrEmpty(_checkAxis))            {                TopBtnGroupDatas.Where(a => a.Value == _checkAxis).FirstOrDefault().IsSelected = true;            }            if (_checkTypeParameter == "PositionAxis")            {                PositionAxisNodeToTableDataSource(data);            }            else            {                foreach (var itemType in _waferRobotParameterNode.SubNodes)                {                    foreach (var item in itemType.SubNodes)                    {                        var ptypeConfig = item.Items.Where(a => a.Name.Equals("Type")).FirstOrDefault();                        if (ptypeConfig != null)                        {                            if (_checkTypeParameter.Equals(ptypeConfig.DefaultValue))                            {                                if (_checkTypeParameter == "PositionConfig")                                {                                    if (_checkAxis == itemType.Name)                                    {                                        item.ParentNode = itemType;                                        data.Add(item);                                        continue;                                    }                                }                                else                                {                                    var axisItem = item.Items.Where(a => a.Name.Equals("Axis")).FirstOrDefault();                                    if (axisItem != null && _checkAxis.Contains(axisItem.DefaultValue))                                    {                                        data.Add(item);                                    }                                    if (axisItem == null && !_checkAxis.Contains("Axis"))                                    {                                        data.Add(item);                                    }                                }                            }                        }                    }                }            }            TableDataSource = data;            GetDataOfConfigItems();            ClearReadDicData();        }        private void PositionAxisNodeToTableDataSource(List<ConfigNode> data)        {            foreach (var itemType in _waferRobotParameterNode.SubNodes)            {                data.Add(itemType);            }        }        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();        }        public async void Upload(object obj)        {            var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM,              $"Are you sure you want to Upload?");            if (selection == DialogButton.No)                return;            if (!IsClickButton)            {                return;            }            AllBtnIsEnable = false;            BusyIndicatorVisibility = true;            if (obj.ToString().Equals("PositionConfig"))            {                SetPositionConfigUpload();            }            else if (obj.ToString().Equals("PositionAxis"))            {                SetPositionAxisUpload();            }            else if (obj.ToString().Equals("Parameter"))            {                SetParameterUpload();            }            async void SetPositionAxisUpload()            {                var allNames = TableDataSource.Select(a => a.Name).ToList();                string parameter = string.Join(";", TableDataSource.Select(a => a.Name).ToArray());                if (!string.IsNullOrEmpty(parameter))                {                    InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotPositionAxis", parameter);                }                await WaitForResultsAsync();                if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)                {                    foreach (var item in ReadRobotParameterResultDict)                    {                        if (!allNames.Contains(item.Key))                        {                            continue;                        }                        if (!allNames.Contains(item.Key))                        {                            continue;                        }                        var dataConfig = TableDataSource.Where(a => a.Name == item.Key).FirstOrDefault();                        var itemValues = item.Value.Split(',').ToList();                        InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.ToDownAxis", CheckUnitData(dataConfig.Items[1].Unit, itemValues[0]));                        InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.RotateAxis", CheckUnitData(dataConfig.Items[2].Unit, itemValues[1]));                        InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis1", CheckUnitData(dataConfig.Items[3].Unit, itemValues[2]));                        if (itemValues.Count>3)                        {                            InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis2", CheckUnitData(dataConfig.Items[4].Unit, itemValues[3]));                        }                        if (itemValues.Count >4)                        {                            InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.VariableSpacingAxis", CheckUnitData(dataConfig.Items[5].Unit, itemValues[4]));                        }                    }                }                GetDataOfConfigItems();                BusyIndicatorVisibility = false;                AllBtnIsEnable = true;            }            async void SetPositionConfigUpload()            {                var allNames = TableDataSource.Select(a => a.Name).ToList();                List<string> parameterItem = new List<string>();                foreach (var item in TableDataSource)                {                    parameterItem.Add($"{item.Name},{item.ParentNode.Items.FirstOrDefault().DefaultValue}");                }                string parameter = string.Join(";", parameterItem);                if (!string.IsNullOrEmpty(parameter))                {                    InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotPositionConfig", parameter);                }                await WaitForResultsAsync();                if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)                {                    foreach (var item in ReadRobotParameterResultDict)                    {                        if (!allNames.Contains(item.Key))                        {                            continue;                        }                        var dataConfig = TableDataSource.Where(a => a.Name == item.Key).FirstOrDefault();                        var path = $"{dataConfig.Path}.{dataConfig.Name}.SetValue";                        var unitConfig = dataConfig.Items.Where(a => a.Name == "Unit").FirstOrDefault();                        var setValue = CheckUnitData(unitConfig.CurrentValue, item.Value.Split(',').LastOrDefault());                        InvokeClient.Instance.Service.DoOperation("System.SetConfig", path, setValue);                    }                }                GetDataOfConfigItems();                BusyIndicatorVisibility = false;                AllBtnIsEnable = true;            }            async void SetParameterUpload()            {                var allNames = TableDataSource.Select(a => a.Name.Replace("P", "")).ToList();                string parameter = string.Join(";", allNames);                if (!string.IsNullOrEmpty(parameter))                {                    InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotParameters", parameter);                }                await WaitForResultsAsync();                if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)                {                    foreach (var item in ReadRobotParameterResultDict)                    {                        var itemConfig = TableDataSource.Where(a => a.Name == $"P{item.Key}").FirstOrDefault();                        if (!allNames.Contains(item.Key) || itemConfig == null)                            continue;                        var unitConfig = itemConfig.Items.Where(a => a.Name == "Unit").FirstOrDefault();                        var setValue = CheckUnitData(unitConfig.CurrentValue, item.Value);                        InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.Parameter.P{item.Key}.SetValue", setValue);                    }                }                GetDataOfConfigItems();                BusyIndicatorVisibility = false;                AllBtnIsEnable = true;            }        }        public List<double> ExtractFloatingPointNumbers(string input)        {            // 使用正则表达式匹配所有数字字符,包括小数点            MatchCollection matches = Regex.Matches(input, @"\d+\.\d+|\d+");            // 将匹配到的数字部分转换为 double 类型并添加到列表中            List<double> result = new List<double>();            foreach (Match match in matches)            {                if (double.TryParse(match.Value, out double number))                {                    result.Add(number);                }            }            return result;        }        private double CheckUnitData(string unitStr, string valueStr, bool isDivision = false)        {            if (string.IsNullOrEmpty(unitStr))            {                return double.Parse(valueStr);            }            var numberData = ExtractFloatingPointNumbers(unitStr).FirstOrDefault();            return isDivision ? double.Parse(valueStr) / numberData : double.Parse(valueStr) * numberData;        }        private string CheckUnitSetData(string unitStr, string valueStr, bool isDivision = false, int length = 11)        {            var setValue = CheckUnitData(unitStr, valueStr, isDivision);            if (setValue >= 0)            {                return $"{Math.Abs(setValue).ToString().PadLeft(length, '0')}";            }            else            {                return $"{(Math.Abs(setValue) * -1).ToString().PadLeft(length, '0')}";            }        }        private async Task WaitForResultsAsync()        {            // Simulate waiting for results using a delay            // In a real-world scenario, you might wait for an event or a specific condition            await Task.Delay(TableDataSource.Count * 300);            // Here you can add logic to check if the results are ready            // For example, polling or using a completion source        }        private string GetAxisValue(string value)        {            return (double.Parse(value.TrimStart('0')) / 1000).ToString("f3");        }        public void Download(object obj)        {            var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM,             $"Are you sure you want to Download?");            if (selection == DialogButton.No)                return;            string parameter = "";            string setParameter = "";            if (obj.ToString().Equals("PositionConfig"))            {                SetPositionConfigDownload();            }            else if (obj.ToString().Equals("PositionAxis"))            {                SetPositionAxisDownload();            }            else if (obj.ToString().Equals("Parameter"))            {                SetParameterDownload();            }            if (!string.IsNullOrEmpty(parameter))            {                InvokeClient.Instance.Service.DoOperation($"{SystemName}.SetRobotParameters", setParameter, parameter);                SetValues.Clear();            }            void SetParameterDownload()            {                setParameter = "SetParameter";                foreach (var item in TableDataSource)                {                    var value = item.Items.Where(a => a.Name == "SetValue").FirstOrDefault().CurrentValue;                    var unit = item.Items.Where(a => a.Name == "Unit").FirstOrDefault().CurrentValue;                    var setValue = CheckUnitSetData(unit, value, true);                    parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";                }                //foreach (var item in SetValues)                //{                //    parameter = parameter + $"{item.Key.Replace("P", "")},{item.Value};";                //}            };            void SetPositionAxisDownload()            {                setParameter = "SetPositionAxis";                foreach (var item in TableDataSource)                {                    List<string> valueStr = new List<string>();                    for (int i = 1; i < item.Items.Count; i++)                    {                        var setValue = CheckUnitSetData(item.Items[i].Unit, item.Items[i].CurrentValue, true);                        valueStr.Add(setValue);                    }                    parameter = parameter + $"{item.Name},{string.Join(",", valueStr.ToArray())};";                }            };            void SetPositionConfigDownload()            {                setParameter = "SetPositionConfig";                foreach (var item in TableDataSource)                {                    var value = item.Items.Where(a => a.Name == "SetValue").FirstOrDefault().CurrentValue;                    var unit = item.Items.Where(a => a.Name == "Unit").FirstOrDefault().CurrentValue;                    var setValue = CheckUnitSetData(unit, value, true);                    parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";                }            };        }        public void ClearReadDicData()        {            InvokeClient.Instance.Service.DoOperation("CarrierRobot.ClearReadDicData");        }        public void SelectionChangedHandle(object obj, MouseButtonEventArgs e)        {            var source = e.OriginalSource as DependencyObject;            while (source != null && !(source is ListViewItem))//只有listViewitem才触发            {                source = VisualTreeHelper.GetParent(source);            }            if (source == null) return;            ConfigNode node = (ConfigNode)obj;            if (node == null)            {                    return;            }            var windowManager = IoC.Get<IWindowManager>();            var colData = TableDataSource.Where(a => a.Name.Equals(node.Name)).FirstOrDefault();            if (_checkTypeParameter == "PositionConfig")            {                WaferRobotPositionEditViewModel editViewModel = new WaferRobotPositionEditViewModel();                editViewModel.TableNodeItems = colData.Items;                var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit{SystemName}Position");                if ((bool)rtn)                {                    if (string.IsNullOrEmpty(editViewModel.setValue))                    {                        return;                    }                    if (SetValues.ContainsKey(colData.Name))                    {                        SetValues[editViewModel._pName] = editViewModel.setValue;                    }                    else                    {                        SetValues.Add(editViewModel._pName, editViewModel.setValue);                    }                }            }            else if (_checkTypeParameter == "PositionAxis")            {                WaferRobotPositionAxisEditViewModel editViewModel = new WaferRobotPositionAxisEditViewModel();                editViewModel.TableNodeItems = colData.Items;                var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit {SystemName}PositionAxis");                if ((bool)rtn)                {                    if (string.IsNullOrEmpty(editViewModel.setValue))                    {                        return;                    }                    if (SetValues.ContainsKey(colData.Name))                    {                        SetValues[editViewModel._pName] = editViewModel.setValue;                    }                    else                    {                        SetValues.Add(editViewModel._pName, editViewModel.setValue);                    }                }            }            else            {                WaferRobotParameterEditViewModel editViewModel = new WaferRobotParameterEditViewModel();                editViewModel.TableNodeItems = colData.Items;                var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit {SystemName}Parameter");                if ((bool)rtn)                {                    if (string.IsNullOrEmpty(editViewModel.setValue))                    {                        return;                    }                    if (SetValues.ContainsKey(colData.Name))                    {                        SetValues[editViewModel._pName] = editViewModel.setValue;                    }                    else                    {                        SetValues.Add(editViewModel._pName, editViewModel.setValue);                    }                }            }            GetDataOfConfigItems();            e.Handled = true;        }        protected override void OnInitialize()        {            base.OnInitialize();            InitData();        }        private void InitData()        {            _allRootNode = SystemConfigProvider.Instance.GetConfig(true);            SwitchListView(_checkTypeParameter);        }        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)        {            base.InvokeAfterUpdateProperty(data);            //         [Subscription("WaferRobot.ReadRobotParameterResultDict")]            //public Dictionary<string, string> ReadRobotParameterResultDict { get; set; }            IsShowRobotDownBtn = (bool)QueryDataClient.Instance.Service.GetConfig("System.IsShowRobotDownBtn");            var readData = QueryDataClient.Instance.Service.GetData($"{SystemName}.ReadRobotParameterResultDict");            if (readData != null)            {                ReadRobotParameterResultDict = (Dictionary<string, string>)readData;            }            if (WaferRobotStaus != null)            {                IsClickButton = true;            }        }        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 + ".", ""));        }    }}
 |