326 lines
10 KiB
C#
326 lines
10 KiB
C#
using AutoMapper;
|
||
using CapMachine.Core;
|
||
using CapMachine.Model.CANLIN;
|
||
using CapMachine.Wpf.Dtos;
|
||
using Prism.Commands;
|
||
using Prism.Services.Dialogs;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.ObjectModel;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
|
||
namespace CapMachine.Wpf.ViewModels
|
||
{
|
||
public class DialogLINSchConfigViewModel:DialogViewModel
|
||
{
|
||
public DialogLINSchConfigViewModel(IFreeSql freeSql, IMapper mapper)
|
||
{
|
||
Title = "调度表 LIN 配置";
|
||
FreeSql = freeSql;
|
||
Mapper = mapper;
|
||
|
||
//默认只能用1号调度器
|
||
SchTabIndexCbxItems = new ObservableCollection<CbxItems>()
|
||
{
|
||
new CbxItems(){
|
||
Key="0",
|
||
Text="0",
|
||
},
|
||
//new CbxItems(){
|
||
// Key="1",
|
||
// Text="1",
|
||
//},
|
||
//new CbxItems(){
|
||
// Key="2",
|
||
// Text="2",
|
||
//},
|
||
//new CbxItems(){
|
||
// Key="3",
|
||
// Text="3",
|
||
//},
|
||
//new CbxItems(){
|
||
// Key="4",
|
||
// Text="4",
|
||
//},
|
||
};
|
||
|
||
}
|
||
|
||
public IFreeSql FreeSql { get; }
|
||
public IMapper Mapper { get; }
|
||
|
||
private string name;
|
||
/// <summary>
|
||
/// 名称
|
||
/// </summary>
|
||
public string Name
|
||
{
|
||
get { return name; }
|
||
set { name = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
private ObservableCollection<LINScheduleConfigDto> _ListLINScheduleConfigDto = new ObservableCollection<LINScheduleConfigDto>();
|
||
/// <summary>
|
||
/// LIN 调度表数据集合
|
||
/// </summary>
|
||
public ObservableCollection<LINScheduleConfigDto> ListLINScheduleConfigDto
|
||
{
|
||
get { return _ListLINScheduleConfigDto; }
|
||
set { _ListLINScheduleConfigDto = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 消息/帧报文信息集合
|
||
/// </summary>
|
||
public List<string> ListMsg { get; set; }
|
||
|
||
private ObservableCollection<CbxItems> _MsgCbxItems;
|
||
/// <summary>
|
||
/// 消息名称 集合信息
|
||
/// </summary>
|
||
public ObservableCollection<CbxItems> MsgCbxItems
|
||
{
|
||
get { return _MsgCbxItems; }
|
||
set { _MsgCbxItems = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 选中的程序的Id
|
||
/// </summary>
|
||
public long SelectCanLinConfigProId { get; set; }
|
||
|
||
|
||
private ObservableCollection<CbxItems> _SchTabIndexCbxItems;
|
||
/// <summary>
|
||
/// 调度器序号 集合信息
|
||
/// </summary>
|
||
public ObservableCollection<CbxItems> SchTabIndexCbxItems
|
||
{
|
||
get { return _SchTabIndexCbxItems; }
|
||
set { _SchTabIndexCbxItems = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
private LINScheduleConfigDto _CurSelectedItem;
|
||
/// <summary>
|
||
/// 选中的数据
|
||
/// </summary>
|
||
public LINScheduleConfigDto CurSelectedItem
|
||
{
|
||
get { return _CurSelectedItem; }
|
||
set { _CurSelectedItem = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
|
||
private DelegateCommand<object> _GridSelectionChangedCmd;
|
||
/// <summary>
|
||
/// 选中行数据命令
|
||
/// </summary>
|
||
public DelegateCommand<object> GridSelectionChangedCmd
|
||
{
|
||
set
|
||
{
|
||
_GridSelectionChangedCmd = value;
|
||
}
|
||
get
|
||
{
|
||
if (_GridSelectionChangedCmd == null)
|
||
{
|
||
_GridSelectionChangedCmd = new DelegateCommand<object>((par) => GridSelectionChangedCmdMethod(par));
|
||
}
|
||
return _GridSelectionChangedCmd;
|
||
}
|
||
}
|
||
private void GridSelectionChangedCmdMethod(object par)
|
||
{
|
||
//先判断是否是正确的集合数据,防止DataGrid的数据源刷新导致的触发事件
|
||
var Selecteddata = par as LINScheduleConfigDto;
|
||
|
||
if (Selecteddata != null)
|
||
{
|
||
CurSelectedItem = Selecteddata;
|
||
}
|
||
}
|
||
|
||
//OpCmd
|
||
private DelegateCommand<string> _OpCmd;
|
||
/// <summary>
|
||
/// 增加方法命令
|
||
/// </summary>
|
||
public DelegateCommand<string> OpCmd
|
||
{
|
||
set
|
||
{
|
||
_OpCmd = value;
|
||
}
|
||
get
|
||
{
|
||
if (_OpCmd == null)
|
||
{
|
||
_OpCmd = new DelegateCommand<string>((Par) => OpCmdCall(Par));
|
||
}
|
||
return _OpCmd;
|
||
}
|
||
}
|
||
|
||
private void OpCmdCall(string Par)
|
||
{
|
||
switch (Par)
|
||
{
|
||
case "Add":
|
||
ListLINScheduleConfigDto.Add(new LINScheduleConfigDto
|
||
{
|
||
CanLinConfigProId = SelectCanLinConfigProId,
|
||
Cycle = 100,
|
||
SchTabIndex = 0,
|
||
});
|
||
break;
|
||
case "Delete":
|
||
if (CurSelectedItem != null)
|
||
{
|
||
//直接删除掉,如果没有ID的话,这就不需要删除了
|
||
FreeSql.Delete<LINScheduleConfig>(CurSelectedItem.Id).ExecuteAffrows();
|
||
ListLINScheduleConfigDto.Remove(CurSelectedItem);
|
||
|
||
CurSelectedItem = null;
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("请选中后再进行【删除】操作?", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
private DelegateCommand saveCmd;
|
||
/// <summary>
|
||
/// 保存命令
|
||
/// </summary>
|
||
public DelegateCommand SaveCmd
|
||
{
|
||
set
|
||
{
|
||
saveCmd = value;
|
||
}
|
||
get
|
||
{
|
||
if (saveCmd == null)
|
||
{
|
||
saveCmd = new DelegateCommand(() => SaveCmdMethod());
|
||
}
|
||
return saveCmd;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存命令方法
|
||
/// </summary>
|
||
/// <exception cref="NotImplementedException"></exception>
|
||
private void SaveCmdMethod()
|
||
{
|
||
//检查空的数据
|
||
foreach (var item in ListLINScheduleConfigDto)
|
||
{
|
||
|
||
if (string.IsNullOrEmpty(item.MsgName))
|
||
{
|
||
MessageBox.Show("请确认消息名称是否正确", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||
return;
|
||
}
|
||
if (item.Cycle == 0)
|
||
{
|
||
MessageBox.Show("请确认周期是否正确", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||
return;
|
||
}
|
||
}
|
||
|
||
|
||
//发送的控制帧都放到同一个调度表中,不需要检查了
|
||
////检查重复设置问题
|
||
//bool isRepeat = ListLINScheduleConfigDto.GroupBy(i => i.MsgName).Any(g => g.Count() > 1);
|
||
//if (isRepeat)
|
||
//{
|
||
// MessageBox.Show("请确认是否重复设置", "提示", MessageBoxButton.OK, MessageBoxImage.Hand);
|
||
// return;
|
||
//}
|
||
|
||
//检查数据是否正常
|
||
foreach (var item in ListLINScheduleConfigDto)
|
||
{
|
||
FreeSql.InsertOrUpdate<LINScheduleConfig>()
|
||
.SetSource(Mapper.Map<LINScheduleConfig>(item)).
|
||
ExecuteAffrows();
|
||
}
|
||
|
||
ListLINScheduleConfigDto = new ObservableCollection<LINScheduleConfigDto>(Mapper.Map<List<LINScheduleConfigDto>>(FreeSql.Select<LINScheduleConfig>().Where(a => a.CanLinConfigProId == SelectCanLinConfigProId).ToList()));
|
||
|
||
DialogParameters pars = new DialogParameters
|
||
{
|
||
{ "ReturnValue", ListLINScheduleConfigDto }
|
||
};
|
||
|
||
RaiseRequestClose(new DialogResult(ButtonResult.OK, pars));
|
||
}
|
||
|
||
private DelegateCommand cancelCmd;
|
||
/// <summary>
|
||
/// 保存命令
|
||
/// </summary>
|
||
public DelegateCommand CancelCmd
|
||
{
|
||
set
|
||
{
|
||
cancelCmd = value;
|
||
}
|
||
get
|
||
{
|
||
if (cancelCmd == null)
|
||
{
|
||
cancelCmd = new DelegateCommand(() => CancelCmdMethod());
|
||
}
|
||
return cancelCmd;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 取消命令方法
|
||
/// </summary>
|
||
/// <exception cref="NotImplementedException"></exception>
|
||
private void CancelCmdMethod()
|
||
{
|
||
RaiseRequestClose(new DialogResult(ButtonResult.Cancel));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 窗口打开时的传递的参数
|
||
/// </summary>
|
||
/// <param name="parameters"></param>
|
||
public override void OnDialogOpened(IDialogParameters parameters)
|
||
{
|
||
ListMsg = parameters.GetValue<List<string>>("ListMsg");
|
||
// 转换为CbxItems集合,都是文本内容
|
||
MsgCbxItems = new ObservableCollection<CbxItems>(
|
||
ListMsg.Select(value => new CbxItems
|
||
{
|
||
Key = value,
|
||
Text = value
|
||
}));
|
||
|
||
ListLINScheduleConfigDto = parameters.GetValue<ObservableCollection<LINScheduleConfigDto>>("ListLINScheduleConfigDto");
|
||
//防止返回的数据为空,就无法增加了
|
||
if (ListLINScheduleConfigDto == null) ListLINScheduleConfigDto = new ObservableCollection<LINScheduleConfigDto>();
|
||
//Name = parameters.GetValue<string>("Name");
|
||
|
||
SelectCanLinConfigProId = parameters.GetValue<long>("SelectCanLinConfigProId");
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|