using HMI.Core.Entity; using HMI.ParameterManage.Model; using HMI.UI.DpUtil; using HMI.UI.Util; using Microsoft.Win32; using Panuon.WPF.UI; using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Controls; namespace HMI.ParameterManage { /// /// ModalWindow.xaml 的交互逻辑 /// public partial class ParameterModal : WindowX { private XmlModel DataModel; public ParameterModal(XmlModel model) { DataModel = model; this.DataContext = this; InitializeComponent(); } public ParameterData Data { get; set; } private bool _isProcessing; protected override void OnClosing(CancelEventArgs e) { //Press Continue Button if (DialogResult == true) { if (_isProcessing) { e.Cancel = true; return; } var okButton = WindowXModalDialog.GetOKButton(this); try { _isProcessing = true; ButtonHelper.SetIsPending(okButton, true); if (!ValidateForm()) { e.Cancel = true; return; } DataModel.SaveOrUpdateParameter(Data); } catch (Exception ex) { ToastHelper.Error(this, $"Error: {ex.Message}"); e.Cancel = true; return; } finally { _isProcessing = false; ButtonHelper.SetIsPending(okButton, false); } } base.OnClosing(e); } public bool ValidateName(object value, out string err) { return DataModel.ValidateParameterName(value, out err); } private bool ValidateForm() { bool flag = FormGroupHelper.ValidateForm(formPanel, new Dictionary { { "FgValue",GetTargetValue()} }); if (flag) { Data.Name = TbName.Text; Data.Type = CbType.Text; Data.Value = GetTargetValue(); Data.Unit = TbUnit.Text; Data.Description = TbDescription.Text; Data.ProductName = TbProductName.Text; Data.PGroup = TbPGroup.Text; } return flag; } public bool? Open(string productName, ParameterData data) { Data = data; TbName.Text = Data.Name; CbType.SelectedValue = Data.Type; UpdateWindow(Data.Type); UpdateForm(Data); TbUnit.Text = Data.Unit; TbProductName.Text = productName; TbDescription.Text = Data.Description; TbPGroup.Text = Data.PGroup; return this.ShowDialog(); } private string GetTargetValue() { if (CbType.Text == "Int" || Data.Type == "Double") { return NiNumberValue.Text; } else if (CbType.Text == "Bool") { return CbBoolValue.Text; } else { return TbStringValue.Text; } } private void UpdateForm(ParameterData data) { if (Data.Type == "Int" || Data.Type == "Int") { NiNumberValue.Text = Data.Value; } else if (Data.Type == "Bool") { CbBoolValue.SelectedValue = Data.Value; } else { TbStringValue.Text = Data.Value; } } private void UpdateWindow(string type) { if (type == "Int" || type == "Double") { NiNumberValue.Visibility = System.Windows.Visibility.Visible; StringValueGrid.Visibility = System.Windows.Visibility.Collapsed; CbBoolValue.Visibility = System.Windows.Visibility.Collapsed; } else if (type == "Bool") { NiNumberValue.Visibility = System.Windows.Visibility.Collapsed; StringValueGrid.Visibility = System.Windows.Visibility.Collapsed; CbBoolValue.Visibility = System.Windows.Visibility.Visible; } else { NiNumberValue.Visibility = System.Windows.Visibility.Collapsed; StringValueGrid.Visibility = System.Windows.Visibility.Visible; CbBoolValue.Visibility = System.Windows.Visibility.Collapsed; } } private void CbType_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { string val = null; if (e.AddedItems != null && e.AddedItems.Count > 0) { val = ((ComboBoxItem)e.AddedItems[0]).Content.ToString(); } UpdateWindow(val); } private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == true) { TbStringValue.Text = ofd.FileName; } } } }