using HMI.Core.Util; using HMI.UI.DpUtil; using HMI.UI.Util; using Panuon.WPF.UI; using Plugin.ServoManage.Entity; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; namespace Plugin.ServoManage { /// /// ModalWindow.xaml 的交互逻辑 /// public partial class ServoModal : WindowX { public ServoModal() { this.DataContext = this; InitializeComponent(); } public ServoData Data { get; set; } private ObservableCollection Datasource; 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) { ToastHelper.Error(this, $"Error!{ex.Message}"); e.Cancel = true; return; } finally { _isProcessing = false; ButtonHelper.SetIsPending(okButton, false); } } base.OnClosing(e); } private bool ValidateName(object value, out string err) { err = null; var data = Datasource?.FirstOrDefault(d => d.Name == value.ToString()); if (data != null && data != Data) { err = string.Format(LangUtil.Get("App.MustBeUnique"), LangUtil.Get("svo.name")); return false; } return true; } private bool ValidateForm() { bool flag = FormGroupHelper.ValidateForm(formPanel); if (flag) { Data.Name = TbName.Text; Data.Unit = CbUnit.Text; } return flag; } public bool? Open(ServoData data, ObservableCollection datasource) { Datasource = datasource; Data = data; TbName.Text = Data.Name; CbUnit.SelectedValue = Data.Unit; return this.ShowDialog(); } private void SaveOrUpdateData() { int index = Datasource.IndexOf(Data); if (index < 0) { InsertData(Data); } else { UpdateData(index, Data); } } public void InsertData(ServoData data) { Datasource.Add(data); XmlHelper.SerializeToXml(ServoManage.FilePath, Datasource); } public void UpdateData(int index, ServoData data) { var temp = XmlHelper.DeepClone(Datasource); temp[index] = data; XmlHelper.SerializeToXml(ServoManage.FilePath, Datasource); } } }