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; } = Lang.添加机器人; 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()); } } }