using HMI.AlarmInfoManage.Entity;
using HMI.Core.Util;
using HMI.UI.Util;
using log4net;
using Panuon.WPF.UI;
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace HMI.AlarmInfoManage
{
///
/// AlarmSettingList.xaml 的交互逻辑
///
public partial class AlarmSettingList : WindowX
{
private ILog log;
public AlarmSettingList(string blockFile, string markFile, ILog log)
{
this.blockFile = blockFile;
this.markFile = markFile;
this.log = log;
DataContext = this;
InitializeComponent();
}
private readonly string blockFile;
private readonly string markFile;
private ObservableCollection datasource;
public ObservableCollection Datasource
{
get => datasource;
set { Set(ref datasource, value); }
}
private ObservableCollection markDatasource;
public ObservableCollection MarkDatasource
{
get => markDatasource;
set { Set(ref markDatasource, value); }
}
private ObservableCollection items =
new ObservableCollection { "DB块报警", "标志位报警" };
public ObservableCollection Items
{
get => items;
set { Set(ref items, value); }
}
private string selectedValue;
public string SelectedValue
{
get { return selectedValue; }
set
{
Set(ref selectedValue, value);
LoadData();
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
DataGridRow row = btn?.Tag as DataGridRow;
switch (btn.Name)
{
case "refreshBtn":
LoadData();
break;
case "addBtn":
AddData(new AlarmSetting());
break;
case "delBatchBtn":
DeleteBatchData();
break;
case "editBtn":
EditData(row.GetIndex(), btn.DataContext as AlarmSetting);
break;
case "delBtn":
DeleteData(row.GetIndex());
break;
default:
break;
}
}
private void LoadData()
{
try
{
ObservableCollection datasource = new ObservableCollection();
if (SelectedValue == "DB块报警" && File.Exists(blockFile))
{
datasource =
XmlHelper.DeserializeFromXml>(blockFile);
}
else if (SelectedValue == "标志位报警" && File.Exists(markFile))
{
datasource =
XmlHelper.DeserializeFromXml>(markFile);
}
Datasource = datasource;
}
catch (Exception ex)
{
ToastHelper.Error(this, $"加载错误!{ex.Message}");
}
}
private void AddData(AlarmSetting data)
{
try
{
var file = SelectedValue == "DB块报警" ? blockFile : markFile;
var modal = new AlarmSettingModal(log)
{
Title = $"新增{SelectedValue}",
Owner = Window.GetWindow(this),
};
if (modal.Open(-1, data, Datasource, file) == true)
{
LoadData();
}
}
catch (Exception ex)
{
log.Error("Add AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"新增失败!{ex.Message}");
}
}
private void EditData(int index, AlarmSetting data)
{
try
{
var file = SelectedValue == "DB块报警" ? blockFile : markFile;
var modal = new AlarmSettingModal(log)
{
Title = $"编辑{SelectedValue}",
Owner = Window.GetWindow(this),
};
if (modal.Open(index, data, Datasource, file) == true)
{
LoadData();
}
}
catch (Exception ex)
{
log.Error("Edit AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"编辑失败!{ex.Message}");
}
}
private void DeleteData(int index)
{
try
{
if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "确定要删除该项吗?该操作不可逆") == MessageBoxResult.OK)
{
var file = SelectedValue == "DB块报警" ? blockFile : markFile;
var temp = XmlHelper.DeepClone(Datasource);
temp.RemoveAt(index);
XmlHelper.SerializeToXml(file, temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"删除失败!{ex.Message}");
}
}
private void DeleteBatchData()
{
try
{
var temp = Datasource.Where(e => e.IsSelected).ToList();
if (temp == null || temp.Count <= 0)
{
ToastHelper.Warning(Window.GetWindow(this), "请选择要删除的数据");
return;
}
if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), $"确定要删除{temp.Count}项数据吗?该操作不可逆") == MessageBoxResult.OK)
{
var file = SelectedValue == "DB块报警" ? blockFile : markFile;
temp = Datasource.Where(e => !e.IsSelected).ToList();
XmlHelper.SerializeToXml(file, temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete Batch AlarmSetting Failed.", ex);
ToastHelper.Error(this, $"删除失败!{ex.Message}");
}
}
private void WindowX_Loaded(object sender, RoutedEventArgs e)
{
SelectedValue = "DB块报警";
Loaded -= WindowX_Loaded;
}
}
}