using Prism.Commands;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using TeamAAS_VP.Core;
using TeamAAS_VP.Interfaces;
using TeamAAS_VP.Models;
using TeamAAS_VP.Models.PLC;
using TeamAAS_VP.Resources.Languages;
using TouchSocket.Core;
namespace TeamAAS_VP.ViewModels.Setting
{
public class AddRobotViewModel : BindableBase, IDialogAware
{
private readonly IConfigService _configService;
private RobotInfo _Robot;
///
/// 机器人
///
public RobotInfo Robot
{
get { return _Robot; }
set
{
SetProperty(ref _Robot, value);
}
}
private ObservableCollection _AllPlc;
public ObservableCollection AllPlc
{
get { return _AllPlc; }
set { SetProperty(ref _AllPlc, value); }
}
private PlcInfo _SelectedPlc;
public PlcInfo SelectedPlc
{
get { return _SelectedPlc; }
set
{
SetProperty(ref _SelectedPlc, value);
if (value != null)
{
Robot.PLC = value.Id;
if (Robot.PlcRobotParameter == null)
{
Robot.PlcRobotParameter = new PlcRobotParameter();
}
if (Robot.PlcRobotParameter.AxixList == null)
{
Robot.PlcRobotParameter.AxixList = new List();
if (Robot.RobotBrand == Enums.RobotBrand.XYZ_Platform)
{
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("X", 1));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Y", 2));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Z", 3));
}
else
{
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("X", 1));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Y", 2));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Z", 3));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("U", 4));
}
}
}
else
{
Robot.PLC = Guid.Empty;
Robot.PlcRobotParameter = null;
}
}
}
private DelegateCommand _ConfirmCommand;
public DelegateCommand ConfirmCommand =>
_ConfirmCommand ?? (_ConfirmCommand = new DelegateCommand(ExecuteConfirmCommand, CanExecuteConfirmCommand).ObservesProperty(() => Robot.RobotName));
private DelegateCommand _CancelCommand;
public DelegateCommand CancelCommand =>
_CancelCommand ?? (_CancelCommand = new DelegateCommand(ExecuteCancelCommand));
public AddRobotViewModel(IConfigService configService)
{
_configService = configService;
}
///
/// 确认按钮
///
///
bool CanExecuteConfirmCommand()
{
return Robot != null && Robot.RobotName != null && !string.IsNullOrEmpty(Robot.RobotName.Trim());
}
void ExecuteConfirmCommand()
{
if (string.IsNullOrEmpty(Robot.RobotName))
{
return;
}
if (!FileHelper.CheckFileName(Robot.RobotName))
{
MessageBox.Show(Lang.AddCameraVM_message1, "AAS", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
if (Robot.RobotBrand == Enums.RobotBrand.XYZ_Platform)
{
if (Robot.PlcRobotParameter == null)
{
Robot.PlcRobotParameter = new PlcRobotParameter();
}
if (Robot.PlcRobotParameter.AxixList == null)
{
Robot.PlcRobotParameter.AxixList = new List();
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("X", 1));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Y", 2));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Z", 3));
}
}
else if (Robot.RobotBrand == Enums.RobotBrand.XYZU_Platform)
{
if (Robot.PlcRobotParameter == null)
{
Robot.PlcRobotParameter = new PlcRobotParameter();
}
if (Robot.PlcRobotParameter.AxixList == null)
{
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("X", 1));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Y", 2));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("Z", 3));
Robot.PlcRobotParameter.AxixList.Add(new Core.Robots.Axis("U", 4));
}
}
else
{
Robot.PlcRobotParameter = null;
}
IDialogParameters parameters = new DialogParameters();
parameters.Add("Robot", Robot);
Tuple rest = new Tuple(false, Robot);
RequestClose?.Invoke(new DialogResult(ButtonResult.OK, parameters));
}
///
/// 取消按钮
///
void ExecuteCancelCommand()
{
IDialogParameters parameters = new DialogParameters();
parameters.Add("Robot", Robot);
Tuple rest = new Tuple(false, Robot);
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel, parameters));
}
public string Title { get; set; } = "添加机器人";
public event Action RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
Title = Lang.增加机器人;
Robot = new RobotInfo() { Id = Guid.NewGuid(), RobotBrand = Enums.RobotBrand.Default, ConnectType = Enums.TCPConnectType.Client, Terminator = Enums.Terminator.CRLF, DataEncoding = Enums.DataEncoding.Default };
AllPlc = new ObservableCollection(_configService.GetAllPlcs());
}
}
}