using HMI.AlarmInfoManage.Entity; using HMI.Core.Util; using HMI.UI.DpUtil; using HMI.UI.Util; using log4net; using Panuon.WPF.UI; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Windows; namespace HMI.AlarmInfoManage { /// /// ModalWindow.xaml 的交互逻辑 /// public partial class AlarmSettingModal : WindowX { public AlarmSettingModal(ILog log) { this.log = log; this.DataContext = this; InitializeComponent(); } private ILog log; public string FilePath { get; private set; } public int DataIndex { get; private set; } public AlarmSetting Data { get; private set; } public ObservableCollection Datasource { get; private 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; } SaveOrUpdateData(); } catch (Exception ex) { log.Error("AlarmSetting Form Submit Failed.", ex); ToastHelper.Error(this, $"Error: {ex.Message}"); e.Cancel = true; return; } finally { _isProcessing = false; ButtonHelper.SetIsPending(okButton, false); } } base.OnClosing(e); } public bool ValidateDBAddress(object value, out string err) { err = null; if (Datasource?.FirstOrDefault(e => e.DBAddress == value) != null) { err = this.lang("App.MustBeUnique", this.lang("Alm.DbAddress")); return false; } return true; } private bool ValidateForm() { bool flag = FormGroupHelper.ValidateForm(formPanel); if (flag) { Data.DBAddress = dbAddress.Text; Data.StartAddress = startAddress.Text; Data.Length = Convert.ToInt32(length.Value); Data.Description = TbDesc.Text; } return flag; } public bool? Open(int index, AlarmSetting data, ObservableCollection dataSource, string filePath, bool showDescription) { FgDesc.Visibility = showDescription ? Visibility.Visible : Visibility.Collapsed; FilePath = filePath; DataIndex = index; Data = data; Datasource = dataSource; dbAddress.Text = Data.DBAddress; startAddress.Text = Data.StartAddress; length.Value = Data.Length; TbDesc.Text = Data.Description; return this.ShowDialog(); } private void SaveOrUpdateData() { if (DataIndex == -1) { InsertData(Data); } else { UpdateData(DataIndex, Data); } } public void InsertData(AlarmSetting data) { Datasource.Add(data); XmlHelper.SerializeToXml(FilePath, Datasource); } public void UpdateData(int index, AlarmSetting data) { Datasource[index] = data; XmlHelper.SerializeToXml(FilePath, Datasource); } } }