/// <summary>
        /// 添加仪器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void NewBtn_ClickAsync(object sender, RoutedEventArgs e)
        {
            //创建创建仪器对话框
            var dialog3 = new InputDialog3();

            dialog3.Model().Label1           = "Instrument Name";
            dialog3.Model().Label3           = "Communication Type";
            dialog3.Model().ItemsSource      = new ObservableCollection <ComboBoxItemModel>(SystemSettings.Comm1);
            dialog3.Model().Input1           = "";
            dialog3.Model().WarningMsg1      = "Input not available!";
            dialog3.Model().Input1Validation = (
                s =>
            {
                return(!SystemSettings.InstrumentsList.Any(t => t.Name.ToUpper() == s.ToUpper()));
            });
Input:
            var result = await DialogHost.Show(dialog3, "RootDialog", new DialogClosingEventHandler((s, t) => { }));

            if ((bool)result)
            {
                var typeStr = ((ComboBoxItemModel)dialog3.Model().Input3).Name;
                var type    = (CommunicationType)Enum.Parse(typeof(CommunicationType), typeStr);

                //仪器通讯类型错误则返回重新选择类型
                if (type == CommunicationType.None)
                {
                    await this.MsgBox("Please select the correct communication type.");

                    goto Input;
                }

                var instr = new InstrumentModel()
                {
                    Name               = dialog3.Model().Input1,
                    Description        = dialog3.Model().Input1,
                    CommnunicationType = type,
                    Config             = CommunicationBase.CreateCfg(type),
                    CommReference      = CommunicationBase.CreateCommunication(type)
                };
                //添加仪器至全局变量
                SystemSettings.InstrumentsList.Add(instr);
                //选中当前添加的仪器
                Instruments.SelectedItem = instr;
            }
        }
        private async void ItemModify(object obj)
        {
            var dialog3 = new InputDialog3();

            dialog3.Model().WarningMsg1      = "Input not available!";
            dialog3.Model().Input1           = this.Model().SelectedItem.Name;
            dialog3.Model().Input2           = this.Model().SelectedItem.Description;
            dialog3.Model().Input3           = SystemSettings.ProductModels.First(t => t.Guid == this.Model().SelectedItem.ProductGuid);
            dialog3.Model().Label3           = "Product Type";
            dialog3.Model().ItemsSource      = new ObservableCollection <ProductModel>(SystemSettings.ProductModels);
            dialog3.Model().Input1Validation = (
                s =>
            {
                if (s == this.Model().SelectedItem.Name)
                {
                    return(true);
                }
                return(!this.Model().Items.Any(t => t.Name.ToUpper() == s.ToUpper()));
            });

            var result = await DialogHost.Show(dialog3, "RootDialog", new DialogClosingEventHandler((s, t) => { }));

            if ((bool)result)
            {
                var name        = dialog3.Model().Input1;
                var description = dialog3.Model().Input2;
                this.Model().SelectedItem.Name        = dialog3.Model().Input1;
                this.Model().SelectedItem.Description = dialog3.Model().Input2;
                this.Model().SelectedItem.ProductGuid = ((ProductModel)dialog3.Model().Input3).Guid;
                var res = this.UpdateData <ProcessListModel>(new[] { 1, 2, 5 }, new[] { name, description },
                                                             new[] { new ConditionExperssion <ProcessListModel>().Eq(0, this.Model().SelectedItem.GUID) });
                if (res.Status)
                {
                    this.Model().UpdateSelectedItem(name, description);
                    this.LoadTableDefine(this.Model().SelectedItem.ProductGuid);
                }
                else
                {
                    await this.MsgBox(res.Message);
                }
            }
        }
        private async void ItemCreate(object obj)
        {
            var dialog3 = new InputDialog3();

            dialog3.Model().WarningMsg1      = "Input not available!";
            dialog3.Model().Label3           = "Product Type";
            dialog3.Model().ItemsSource      = new ObservableCollection <ProductModel>(SystemSettings.ProductModels);
            dialog3.Model().Input1Validation = (
                s =>
            {
                return(!this.Model().Items.Any(t => t.Name.ToUpper() == s.ToUpper()));
            });
            var result = await DialogHost.Show(dialog3, "RootDialog", new DialogClosingEventHandler((s, t) => { }));

            //判断输入是否确认,并添加新增项至列表
            if ((bool)result)
            {
                var item = new ProcessListModel()
                {
                    GUID        = Guid.NewGuid().ToString("N").ToUpper(),
                    Creator     = SystemSettings.Operator.Name,
                    CreateTime  = DateTime.Now.ToString(),
                    Name        = dialog3.Model().Input1,
                    Description = dialog3.Model().Input2,
                    ProductGuid = ((ProductModel)dialog3.Model().Input3).Guid
                };
                var res = this.SaveData(item, null);
                if (res.Status)
                {
                    this.Model().AddProcessItem(item);
                }
                else
                {
                    await this.MsgBox(res.Message);
                }
            }
            this.LoadTableDefine(((ProductModel)dialog3.Model().Input3).Guid);
        }